又是坑爹简单的题目==
递归调用。。
class Solution {
public:
vector<string> result;
void genSub(string &prev,string &digits,int l,vector<string> &dic)
{
if(l>digits.length()) return ;
if(l==digits.length()-1)
{
char c=digits[l];
int dic_idx=c-'2';
if(dic_idx<0 || dic_idx>=dic.size())
result.push_back(prev);
else
{
for(int i=0;i<dic[dic_idx].length();i++)
{
result.push_back(prev+dic[dic_idx][i]);
}
}
}
else
{
char c=digits[l];
int dic_idx=c-'2';
if(dic_idx<0 || dic_idx>=dic.size())
genSub(prev,digits,l+1,dic);
else
{
for(int i=0;i<dic[dic_idx].size();i++)
{
string n_prev= prev+dic[dic_idx][i];
genSub(n_prev,digits,l+1,dic);
}
}
}
}
vector<string> letterCombinations(string digits) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<string> dic;
dic.push_back("abc");
dic.push_back("def");
dic.push_back("ghi");
dic.push_back("jkl");
dic.push_back("mno");
dic.push_back("pqrs");
dic.push_back("tuv");
dic.push_back("wxyz");
result.clear();
if(digits.size()<=0)
{
result.push_back("");
return result;
}
string stmp="";
genSub(stmp,digits,0,dic);
return result;
}
};