本题源自LeetCode
----------------------------------------------
思路:
·1 枚举回溯。
1 将所有的对应关系构建为一个map
2 用回溯法求解
代码:
map<int,string> numToStr={{2,"abc"},{3,"def"},{4,"ghi"},{5,"jkl"},{6,"mno"},{7,"pqrs"},{8,"tuv"},{9,"wxyz"}};
public:
vector<string> letterCombinations(string digits) {
vector<string> result;
string tmp="";
if(digits.length()==0){
result.push_back(tmp);
return result;
}
backPath(result,digits,tmp,0);
return result;
}
void backPath(vector<string>& result,string digits,string tmp,int index){
if(index==digits.length()){
result.push_back(tmp);
return;
}
int k=digits[index]-'0';
for(int i=0;i<numToStr[k].length();i++){
backPath(result,digits,tmp+numToStr[k][i],index+1);
}
}
代码 2 非递归
vector<string> letterCombinations(string digits) {
vector<string> result(1,"");
map<int,string> numToStr={{2,"abc"},{3,"def"},{4,"ghi"},{5,"jkl"},{6,"mno"},{7,"pqrs"},{8,"tuv"},{9,"wxyz"}};
for(int i=0;i<digits.size();i++){
vector<string> tmp;
for(int j=0;j<result.size();j++){
int num=digits[i]-'0';
for(int k=0;k<numToStr[num].size();k++)
{
tmp.push_back(result[j]+numToStr[num][k]);
}
}
result=tmp;
}
return result;
}