本文已参与「新人创作礼」活动,一起开启掘金创作之路。
力扣刷题记录及讲解
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = ""
输出:[]
示例 3:
输入:digits = "2"
输出:["a","b","c"]
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/le…
/**
* @param {string} digits
* @return {string[]}
*/
var letterCombinations = function(digits) {
const nums = {
2: ["a","b","c"],
3: ["d","e","f"],
4: ["g","h","i"],
5: ["j","k","l"],
6: ["m","n","o"],
7: ["p","q","r","s"],
8: ["t","u","v"],
9: ["w","x","y","z"],
}
let strArr = [];
function dfs (str, i) {
// 获取到当前数字对应的字母数组
const letterArr = nums[digits[i]];
// 判断结束条件
if( i > digits.length - 1 ) {
return
}
// for of遍历出每个字母
for( let letter of letterArr ) {
// 判断是否是最后一次,是的话添加至结果数组中
if( i === digits.length - 1 ) {
strArr.push(str + letter)
}
// 把当前结果比如第一遍遍历出a,b,c然后把a,b,c分别代入dfs中进入下一次遍历,
// 这样下一次的字母就会分别与a,b,c相结合,然后再进入下一次dfs,直到i === digits.length - 1添加至结果数组
dfs(str + letter, i+1);
}
}
dfs("", 0);
return strArr
};