题目描述
思路分析
暴搜
这里我实现的有点麻烦,其实可以用一个hash,每个数自映射到它对应的可选字符即可。
代码实现
class Solution {
public:
void dfs(int u,string a,string cur,vector<string>& res){
if(u==a.size()){
res.push_back(cur);
return;
}
if(a[u]=='2'){
dfs(u+1,a,cur+"a",res);
dfs(u+1,a,cur+"b",res);
dfs(u+1,a,cur+"c",res);
}
else if(a[u]=='3'){
dfs(u+1,a,cur+"d",res);
dfs(u+1,a,cur+"e",res);
dfs(u+1,a,cur+"f",res);
}
else if(a[u]=='4'){
dfs(u+1,a,cur+"g",res);
dfs(u+1,a,cur+"h",res);
dfs(u+1,a,cur+"i",res);
}
else if(a[u]=='5'){
dfs(u+1,a,cur+"j",res);
dfs(u+1,a,cur+"k",res);
dfs(u+1,a,cur+"l",res);
}
else if(a[u]=='6'){
dfs(u+1,a,cur+"m",res);
dfs(u+1,a,cur+"n",res);
dfs(u+1,a,cur+"o",res);
}
else if(a[u]=='7'){
dfs(u+1,a,cur+"p",res);
dfs(u+1,a,cur+"q",res);
dfs(u+1,a,cur+"r",res);
dfs(u+1,a,cur+"s",res);
}
else if(a[u]=='8'){
dfs(u+1,a,cur+"t",res);
dfs(u+1,a,cur+"u",res);
dfs(u+1,a,cur+"v",res);
}
else if(a[u]=='9'){
dfs(u+1,a,cur+"w",res);
dfs(u+1,a,cur+"x",res);
dfs(u+1,a,cur+"y",res);
dfs(u+1,a,cur+"z",res);
}
}
vector<string> letterCombinations(string digits) {
vector<string> res;
if(digits.size()==0) return res;
string cur;
dfs(0,digits,cur,res);
return res;
}
};