将 2 2 2—— 9 9 9 和字母对应起来,用字符串数组保存。
递归遍历 d i g i t s digits digits 每一个数字,每一个数字对应的字母,又可以递归遍历,和下一个数字的字母组成排列。当排列长度等于 d i g i t s digits digits 的长度,就组成了一个排列。
d
f
s
dfs
dfs 树 , 以
d
i
g
i
t
s
=
2
/
3
/
4
digits = 2/3/4
digits=2/3/4 为例

只画出了部分
d
f
s
dfs
dfs 树,
b
b
b 和
c
c
c 的子树可以参考
a
a
a ,一共
3
3
=
27
3^3=27
33=27 种组合。
class Solution {
public:
string strs[10]{
"","","abc","def",
"ghi","jkl","mno",
"pqrs","tuv","wxyz",
};
vector<string> ans ;
vector<string> letterCombinations(string digits) {//回溯法
if(digits.empty()) return ans;//输入空,返回空。
dfs(digits,0,"");
return ans;
}
void dfs(string digits, int u , string path){//u在path对应第几个字符。
if(u==digits.size()) ans.push_back(path);
else{
for(char &x:strs[digits[u]-'0'])//u在digits对应第几个数字。
dfs(digits,u+1,path+x);
}
}
};
理解思路很重要!
欢迎读者在评论区留言,作为日更博主,看到就会回复的。
