LeetCode17 电话号码的数字组合
描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
提示
0 <= digits.length <= 4
digits[i]
是范围['2', '9']
的一个数字。
分析
像这种枚举或者是排列组合的问题,应该立即想到用回溯
代码
private ArrayList<String> res;
private HashMap<Character, String> digitsMap;
public List<String> letterCombinations(String digits) {
res = new ArrayList<>();
if (digits.length()==0)
return res;
digitsMap = new HashMap(){{
put('2',"abc");
put('3',"def");
put('4',"ghi");
put('5',"jkl");
put('6',"mno");
put('7',"pqrs");
put('8',"tuv");
put('9',"wxyz");
}};
backtrack(digits,0,new StringBuffer());
return res;
}
public void backtrack(String digits,int index,StringBuffer combination){
if (index==digits.length()){
res.add(combination.toString());
}else {
String letters = digitsMap.get(digits.charAt(index));
for (int i=0;i<letters.length();i++){
combination.append(letters.charAt(i));
backtrack(digits,index+1,combination);
combination.deleteCharAt(index);
}
}
}