Problem: 17. 电话号码的字母组合
思路
看到排列组合相关的问题,首先想到的就是回溯算法求解,也就是
深度优先搜索(dfs)
进行求解,具体的编码解释已经在代码注释中标出,请看下面的code:
Code
/**
* @param {string} digits
* @return {string[]}
*/
var letterCombinations = function(digits) {
if(!digits.length){
return []
}
//定义 对应1-9位置的字符串
const phoneNumChar = [
"",
"",
"abc",
"def",
"ghi",
"jkl",
"mno",
"pqrs",
"tuv",
"wxyz",
];
const result = [];
//current 用来存储当前深度的叶子节点,dep为当前遍历的深度信息
function dfs(current, dep) {
//如果current字符串的长度和最终叶子节点的长度一样,那么就表示已经到达了结束节点
if (current.length === digits.length) {
result.push(current)
return
}
//创建一个nextStr字符串用来存储下一层的节点信息
let nextStr = phoneNumChar[digits[dep]]
//再遍历这层节点,与上层遍历出来的节点进行组合
for (let i = 0; i < nextStr.length; i++) {
//进入回溯
dfs(current + nextStr[i], dep + 1)
}
}
//启动回溯算法
dfs('', 0);
console.log(result)
return result;
};