**注意::**注意看代码一和代码二的递归函数jq()的不同之处,如果在本层加了push_back(),那么让for的下一个字母进去的之前应该pop_back()出来刚刚的加的字母。
代码一:
class Solution {
public:
map<char,string> h{
{'2',"abc"},{'3',"def"},
{'4',"ghi"},{'5',"jkl"},
{'6',"mno"},{'7',"pqrs"},
{'8',"tuv"},{'9',"wxyz"}
};
vector<string> qq;
vector<string> letterCombinations(string digits) {
string q;
if(digits.size()==0) return qq;
jq(digits,q,0);
return qq;
}
void jq(string dig,string q,int d){
if(d==dig.size()){
qq.push_back(q);
return;
}
for(int i=0;i<h[dig[d]].size();i++){
q.push_back(h[dig[d]][i]);
jq(dig,q,d+1);
q.pop_back();
}
}
};
代码二:
class Solution {
public:
map<char,string> h{
{'2',"abc"},{'3',"def"},
{'4',"ghi"},{'5',"jkl"},
{'6',"mno"},{'7',"pqrs"},
{'8',"tuv"},{'9',"wxyz"}
};
vector<string> qq;
vector<string> letterCombinations(string digits) {
string q;
if(digits.size()==0) return qq;
jq(digits,q,0);
return qq;
}
void jq(string dig,string q,int d){
if(d==dig.size()){
qq.push_back(q);
return;
}
for(int i=0;i<h[dig[d]].size();i++){
jq(dig,q+h[dig[d]][i],d+1);
}
}
};