方案一、递归
class Solution {
public:
vector<string> letterCombinations(string digits) {
if (digits.empty()) return {};
string dict[] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
vector<string> res;
lettercombinations(digits,res,0,"",dict);
return res;
}
void lettercombinations(string digits,vector<string> &res,int level,string tmp,string dict[]){
if(digits.size()==level) {res.push_back(tmp);return;}
string str=dict[digits[level]-'0'];
for(int i=0;i<str.size();i++){
lettercombinations(digits,res,level+1,tmp+str[i],dict);
}
}
};
方案二、循环
class Solution {
public:
vector<string> letterCombinations(string digits) {
if (digits.empty()) return {};
string dict[] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
vector<string> res{""};
for(int i=0;i<digits.size();i++){
string str=dict[digits[i]-'0'];
int num=res.size();
for(int n=0;n<num;n++){
string tmp=res.front();
res.erase(res.begin());
for(int k=0;k<str.size();k++){
res.push_back(tmp+str[k]);
}
}
}
return res;
}
};