Java哈希表
class Solution {
Map<String, String[]> map = new HashMap<>(){{
put("2", new String[]{"a", "b", "c"});
put("3", new String[]{"d", "e", "f"});
put("4", new String[]{"g", "h", "i"});
put("5", new String[]{"j", "k", "l"});
put("6", new String[]{"m", "n", "o"});
put("7", new String[]{"p", "q", "r", "s"});
put("8", new String[]{"t", "u", "v"});
put("9", new String[]{"w", "x", "y", "z"});
}};
List<String> res=new ArrayList<>();
StringBuilder ans=new StringBuilder();
public List<String> letterCombinations(String digits) {
if(digits.length()==0)return res;
backtrack(0,digits.length(),digits);
return res;
}
public void backtrack(int start,int len,String digit){
if(start==len){
res.add(ans.toString());
return;
}
String key = digit.substring(start, start + 1);
String[] all=map.get(key);
for(String ch:all){
ans.append(ch);
backtrack(start+1,len,digit);
ans.deleteCharAt(ans.length()-1);
}
}
}
C++利用桶的思想解决
class Solution {
public:
string tmp;
vector<string> res;
vector<string> board={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
void DFS(int pos,string digits){
if(pos==digits.size()){
res.push_back(tmp);
return;
}
int num=digits[pos]-'0';
for(int i=0;i<board[num].size();i++){
tmp.push_back(board[num][i]);
DFS(pos+1,digits);
tmp.pop_back();
}
}
vector<string> letterCombinations(string digits) {
if(digits.size()==0) return res;
DFS(0,digits);
return res;
}
};