本题源自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"}};
- ublic:
- 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;
- }
转自:http://blog.csdn.net/i_am_bird/article/details/78464870