题目二:
解法一:(回溯)
解题思路:主要就是解决数字和字母的映射关系,这个很重要!!!
数字和字母如何映射
可以使用map或者定义一个二维数组来做映射,代码如下:
const letterMap = ["", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"]
整体代码:
var letterCombinations = function(digits) {
const letterMap = ["", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"]
let result = [] // 存储总结果
// let str = "" // 存储单个结果
const backtracking = (digits, index, str) => {
if (digits.length === 0) return result
if (index === digits.length) {
result.push(str)
return
}
let digit = digits[index] - '0' // 将index指向的数字转为数值型
let letters = letterMap[digit]
for (let i = 0; i < letters.length; i++) {
// str += letters[i]
backtracking(digits, index + 1, str + letters[i])
// str.
}
}
backtracking(digits, 0, "")
return result
};
// 或者
var letterCombinations = function(digits) {
const k = digits.length;
const map = ["","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"];
if(!k) return [];
if(k === 1) return map[digits].split("");
const res = [], path = [];
backtracking(digits, k, 0);
return res;
function backtracking(n, k, a) {
if(path.length === k) {
res.push(path.join(""));
return;
}
for(const v of map[n[a]]) {
path.push(v);
backtracking(n, k, a + 1);
path.pop();
}
}
};