题目描述
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:”23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
解法1:回溯法
构建Map,从头遍历目标字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| class Solution { public: vector<string> letterCombinations(string digits) { map<char,string> m; vector<string> res; if(digits.empty()) return res; m['2']="abc"; m['3']="def"; m['4']="ghi"; m['5']="jkl"; m['6']="mno"; m['7']="pqrs"; m['8']="tuv"; m['9']="wxyz"; int i,j; i=0; string temp; Maps(i,m,res,digits,temp); return res; } void Maps(int i,map<char,string>& m,vector<string>& res,string digits,string temp) { if(i<digits.length()) { string s1=m[digits[i]]; int j; for(j=0;j<s1.length();j++) { temp+=s1.substr(j,1); Maps(i+1,m,res,digits,temp); temp=temp.substr(0,temp.length()-1); } } else { res.push_back(temp); } } };
|