递归
class Solution {
public:
void GetLetter(vector<string>& letters,string letter,vector<string>& mp,string& digits,int sta)
{
int n=digits.size();
int i,j;
if(sta<n&&(digits[sta]==1||digits[sta]==0))
{
return;
}
if(sta>=n)
{
letters.push_back(letter);
return;
}
int num=digits[sta]-'0';
int m=mp[num].size();
for(j=0;j<m;j++)
{
GetLetter(letters,letter+mp[num][j],mp,digits,sta+1);
}
}
vector<string> letterCombinations(string digits) {
vector<string> letters;
string letter;
if(digits=="")
return letters;
vector<string> mp(10);
int i,j;
char c='a';
for(i=2;i<=9;i++)
{
mp[i]="";
for(j=0;j<3;j++)
mp[i]+=c++;
if(i==7||i==9)
mp[i]+=c++;
}
GetLetter(letters,letter,mp,digits,0);
return letters;
}
};
方法2:
使用循环
class Solution {
public:
vector<string> letterCombinations(string digits) {
vector<string> mp(10);
mp[0]="";
mp[1]="";
mp[2]="abc";
mp[3]="def";
mp[4]="ghi";
mp[5]="jkl";
mp[6]="mno";
mp[7]="pqrs";
mp[8]="tuv";
mp[9]="wxyz";
vector<string> letters;
int n=digits.size();
if(n==0)
return letters;
letters.push_back("");
int i,j,k;
for(i=0;i<digits.size();i++)
{
int len=letters.size();
for(j=0;j<len;j++)
{
string tmp=letters[0];
letters.erase(letters.begin());
for(k=0;k<mp[digits[i]-'0'].size();k++)
letters.push_back(tmp+mp[digits[i]-'0'][k]);
}
}
return letters;
}
};