给定一个数字字符串,返回数字所有可能表示的字母组合。
下面给出数字到字母的映射(和电话号码一样)。
输入:数字字符串 "23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
思路1:采用迭代的方法。
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> aa {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
if(digits.empty()) return vector<string>{};
vector<string> re {""};
for(char x: digits){
vector<string> aaa;
for(auto y: re)
for(auto z: aa[x-'0'])
aaa.push_back(y+z);
re=aaa;
}
return re;
}
};
思路2: 深搜。
class Solution {
public:
void dfs(vector<string> &aa, string digits, vector<string> &re, string s){
if(s.size()==digits.size()){
re.push_back(s);
return;
}
for(char x: aa[digits[s.size()]-'0']){
dfs(aa, digits, re, s+x);
}
}
vector<string> letterCombinations(string digits) {
vector<string> aa {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
if(digits.empty()) return {};
vector<string>re;
dfs(aa, digits, re, "");
return re;
}
};