Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.
![]()
Example:
Input: "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
思路:这题要两个两个的求也就是说先求出前两个的组合然后在和第三个数所对应的字符集求组合
我做这题时犯了两个错1:初始化ans的时候,居然把obj里的属性值直接赋给了ans,导致ans变化,obj也跟这变
2.知道哪里错了之后,我居然用ans = new Array(num[第一个数字])来初始化,这样不行,因为它会把ans里的第一个数初始化为obj[第一个数],而不是把ans初始化的和num[第一个数 ]一样
/**
* @param {string} digits
* @return {string[]}
*/
var letterCombinations = function(digits) {
var len = digits.length;
if(len == 0) return [];
else {
var obj = {
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']
}
var ans;
var len2, len3;
var str;
var num = parseInt(digits[0]);
ans = [].concat(obj[num]);//初始化数组
//console.log(ans);
for(let i = 1 ; i < len; i ++){
num = parseInt(digits[i]);
len2 = ans.length;
len3 = obj[num].length;
for(let j = 0; j < len2; j ++){
for(let z = 0; z < len3; z ++){
str = ans[j] + obj[num][z];
//console.log(ans[j], obj[num][z], str);
if(ans.indexOf(str) == -1) ans.push(str);
}
}
for(let j = 0; j < len2; j ++) ans.shift();
}
return ans;
}
};
本文介绍了一种解决电话号码对应字母组合问题的算法。该算法接收包含2到9的数字字符串作为输入,并返回所有可能的字母组合。文章详细解释了实现思路及常见错误,并提供了一个JavaScript函数实现。
556

被折叠的 条评论
为什么被折叠?



