可以从中看到这个是类似于组合的,比如给的数字是234,则可以选一个数字,从2开始选字母,则3选的时候就不能选2了。所以理应用begin来限制下次选的时候选的2中选过的字母,但这个题比较特殊的是他们的数组是分开的,也就是向下递归到3时也应该从0开始,所以就不用begin。
class Solution {
List<String> res=new ArrayList<String>();
public List<String> letterCombinations(String digits) {
if(digits.length() == 0)return res;
Map<Character, String> phoneMap = new HashMap<Character, String>() {{
put('2', "abc");
put('3', "def");
put('4', "ghi");
put('5', "jkl");
put('6', "mno");
put('7', "pqrs");
put('8', "tuv");
put('9', "wxyz");
}};
core(digits.toCharArray(),phoneMap,0,new StringBuilder());
return res;
}
public void core(char[] digits, Map<Character, String> map,int index,StringBuilder sb){
if(sb.length()==digits.length){
res.add(sb.toString());
return;
}
for(int i=0;i<map.get(digits[index]).length();i++){
sb.append(map.get(digits[index]).toCharArray()[i]);
core(digits,map,index+1,sb);
sb.deleteCharAt(sb.length()-1);
}
}
}