class Solution {
public:
vector<string>res;//存结果
string temp;
//哈希存数据
unordered_map<char,string> phone_map {
{'2',"abc"},
{'3',"def"},
{'4',"ghi"},
{'5',"jkl"},
{'6',"mno"},
{'7',"pqrs"},
{'8',"tuv"},
{'9',"wxyz"}
};
vector<string> letterCombinations(string digits) {
if(digits.size() == 0){
return {};
}
backtrace(0,digits);
return res;
}
void backtrace(int index, string digits){
if(index == digits.size()){
res.push_back(temp);
return ;
}
char digit = digits[index];//digits:"23"
for(int i = 0; i < phone_map[digit].size(); i++){
temp.push_back(phone_map[digit][i]);
backtrace(index+1,digits);
temp.pop_back();//回溯
}
}
};
或者:
class Solution {
public:
vector<string>res;
string temp;
//用vector存数据
vector<string> phone_map {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
vector<string> letterCombinations(string digits) {
if(digits.size() == 0){
return {};
}
backtrace(0,digits);
return res;
}
void backtrace(int index, string digits){
if(index == digits.size()){
res.push_back(temp);
return ;
}
int digit = digits[index] - '0';//digits:"23" 字符转数字
for(int i = 0; i < phone_map[digit].size(); i++){
temp.push_back(phone_map[digit][i]);
backtrace(index+1,digits);
temp.pop_back();//回溯
}
}
};