电话号码的字母组合
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
List<String> list = new ArrayList<>();
public List<String> letterCombinations(String digits) {
if(digits.length() == 0){
return Collections.emptyList();
}
HashMap<Character, String> map = new HashMap<>();
map.put('2', "abc");
map.put('3', "def");
map.put('4', "ghi");
map.put('5', "jkl");
map.put('6', "mno");
map.put('7', "pqrs");
map.put('8', "tuv");
map.put('9', "wxyz");
String res = "";
backTrack(0,digits,res,map);
return list;
}
void backTrack(int start,String digits,String res,HashMap<Character,String> map){
if(res.length() == digits.length()){
list.add(res);
return;
}
char letter = digits.charAt(start);
String tmp = map.get(letter);
for (int i = 0; i < tmp.length(); i++) {
res += tmp.charAt(i);
backTrack(start+1,digits,res,map);
res = res.substring(0,res.length()-1);
}
}
回溯(可优化)