求手机上的数字所对应的字母之间的组合可能。用递归来做比较简单。
class Solution {
public:
int yy[10]={0,0,3,3,3,3,3,4,3,4};//对应每个数字所拥有的字母的个数
char str_ss[10000];
vector<string> letterCombinations(string digits) {
vector<string>res;
if(digits.size()==0)return res;
get_ans(0,digits,res);
return res;
}
public:
void get_ans(int index,string ans,vector<string>& res){
if(index>=ans.size()){res.push_back(str_ss);return ;}
int ww=ans[index]-'2';
int get_number=0;
while(ww){
if(ww==6)get_number+=4;
<span style="white-space:pre"> </span> else get_number+=3;
<span style="white-space:pre"> </span> ww--;
}
for(int ii=get_number;ii<get_number+yy[ans[index]-'0'];ii++){
str_ss[index]='a'+ii;
get_ans(index+1,ans,res);
}
}
};