题目
Given a digit string, 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.
Input:Digit string "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
解释
题目的意思是给我们一个数字字符串Digit String,之后我们需要输出他们的全部的组合.
解决这道题目的思路就是用深度遍历.
然后我们来看一下具体的思路,假如给定的字符串是“234”;
2:[a, b, c]
3:[d, e, f]
4:[g, h, i]
我们想要输出这样的全部组合,怎么做呢?
首先 我们定义一个res为空,符合条件的组合都放在里面,然后定义一个temp为空,来存储每次遍历符合条件的一个字符串.
过程是这样的,首先
temp.push(a);
temp.push(d);
temp.push(g);
此时长度为digits.length;把temp加到res里面.
此时res=[‘adg’]
之后temp.pop()
temp.push(h)
长度为digits.length;temp加到res里面.
res =['adg', 'beh'];
temp.pop();
temp.push(i)
长度 == digits.length temp加到res里面
res = [‘adg’, 'bdh', 'adi'];
.....
就照着这样执行下去,然后就能遍历完所有的组合.
不知道这样讲会不会清楚,如果不清楚,可以留言,我会回复的.
代码
var dict = { // 定义一个键盘的字典
"2": "abc",
"3": "def",
"4": "ghi",
"5": "jkl",
"6": "mno",
"7": "pqrs",
"8":"tuv",
"9":"wxyz"
};
var letterCombinations = function(digits) {
if (digits.length == 0)
return [];
var res = [];
dfs(res, digits, 0, []);
return res;
};
var dfs = function(res, digits, index, temp) { 递归函数
if (temp.length == digits.length) {
res.push(temp.join(''));
return;
}
// dict[digits[index]]就是当前循环的数字对应的字符串.
for (let i = 0; i < dict[digits[index]].length; i++) {
temp.push(dict[digits[index]][i]);
dfs(res, digits, index+1, temp); // index+1代表要循环下一个数字
temp.pop(); // 每次执行完当前的dfs之后,要pop一下,这样才能继续下一次循环
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。