题意
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
样例
示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = ""
输出:[]
示例 3:
输入:digits = "2"
输出:["a","b","c"]
思路
1.为什么是递归呢
第一眼感觉是排列组合,但是一旦画图,就是一棵树,树就可以递归
2.递归出口的条件
出口就是 当组合的长度==digital的长度
3.怎么遍历
先存储按键的字母,然后遍历当前数字的长度,最后在这个过程中完成调用。
仔细看代码
代码
class Solution {
public:
vector<string> res;
string str[8]={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
string path;
void dfs (string & st,int n){
if (st.size() == n){
res.push_back(path);
return ;
}
int ch = st[n]-'2';
for (int i = 0;i < str[ch].size();i ++){
string tp = path;
path += str[ch][i];
dfs(st,n+1);
path = tp;
}
}
vector<string> letterCombinations(string digits) {
if (!digits.size()) return vector<string> ();
dfs (digits,0);
return res;
}
};