根据电话按键,给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
思路:
用map保存数字对应的字母 ,
从第一个数字开始遍历,取一个字母,然后从第二个数字,取一个字母,第三个数字,取一个字母...
数字遍历结束,将拼接好的字符串str加入结果数组res,
回溯,删除最后一个数字对应的字母 ,
不断重复遍历和回溯。
var letterCombinations = function (digits) {
// 如果字符串为空
if (digits.length === 0) return [];
let numMap = new Map([
['0', ''],
['1', ''],
['2', 'abc'],
['3', 'def'],
['4', 'ghi'],
['5', 'jkl'],
['6', 'mno'],
['7', 'pqrs'],
['8', 'tuv'],
['9', 'wxyz']
])
let res = [];
dfs("", digits);
return res;
function dfs(str, digit) {
// 如果字符串为空,将拼接好的字符添加到数组
if (digit.length === 0) res.push(str);
else {
// 字符串第一个字符对应的数字
let numstr = numMap.get(digit[0]);
// 组合字母
for (let i = 0; i < numstr.length; i++) {
str += numstr[i];
// 递归已经组合的str和下一段字符串
dfs(str, digit.slice(1))
// 回溯
str = str.slice(0, -1);
}
}
}
};