这题,好像就只能不停地枚举了。。。
class Solution {
public:
unordered_map<char, string> map = {{'2', "abc"}, {'3', "def"}, {'4', "ghi"}, {'5', "jkl"}, {'6', "mno"},
{'7', "pqrs"}, {'8', "tuv"}, {'9', "wxyz"}};
vector<string> res;
string cur;
void backtrack(string &s, int index){
if(index == s.size()){
res.push_back(cur);
return;
}
for(int i = 0; i < map[s[index]].size(); ++i){
cur += map[s[index]][i];//做出选择
backtrack(s, index+1);
cur.pop_back();//撤销选择
}
}
vector<string> letterCombinations(string digits) {
if(digits.size() == 0) return res;
backtrack(digits, 0);
return res;
}
};
简单优化一下:
class Solution {
public:
unordered_map<char, string> map = {{'2', "abc"}, {'3', "def"}, {'4', "ghi"}, {'5', "jkl"}, {'6', "mno"},
{'7', "pqrs"}, {'8', "tuv"}, {'9', "wxyz"}};
vector<string> res;
void backtrack(string &s, int index, string cur){
if(index == s.size()){
res.push_back(cur);
return;
}
for(int i = 0; i < map[s[index]].size(); ++i)
backtrack(s, index+1, cur+map[s[index]][i]);
}
vector<string> letterCombinations(string digits) {
if(digits.size() == 0) return res;
string cur;
backtrack(digits, 0, cur);
return res;
}
};