简单模拟题,把每一位的可能性列出来。
17. 电话号码的字母组合
class Solution {
public:
string ans="";
int tip;
vector<string> ansx;
//ansx.clear();
void solve(int now,string digits){
if (now>=tip){
ansx.push_back(ans);
return;
}
int cnt=3;
char op[10];
if (digits[now]=='2'){
op[0]='a'; op[1]='b'; op[2]='c';
}
if (digits[now]=='3'){
op[0]='d'; op[1]='e'; op[2]='f';
}
if (digits[now]=='4'){
op[0]='g'; op[1]='h'; op[2]='i';
}
if (digits[now]=='5'){
op[0]='j'; op[1]='k'; op[2]='l';
}
if (digits[now]=='6'){
op[0]='m'; op[1]='n'; op[2]='o';
}
if (digits[now]=='7'){
op[0]='p'; op[1]='q'; op[2]='r'; op[3]='s';
cnt=4;
}
if (digits[now]=='8'){
op[0]='t'; op[1]='u'; op[2]='v';
}
if (digits[now]=='9'){
op[0]='w'; op[1]='x'; op[2]='y'; op[3]='z';
cnt=4;
}
for (int i=0;i<cnt;i++){
ans+=op[i];
solve(now+1,digits);
ans=ans.substr(0,ans.length()-1);
}
}
vector<string> letterCombinations(string digits) {
tip=digits.length();
ansx.clear();
if (tip>0) solve(0,digits);
return ansx;
}
};