给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
1 public class T17 { 2 3 public List<String> letterCombinations(String digits) { 4 HashMap<Character, String> hashMap = new HashMap<>(); 5 hashMap.put('2', "abc"); 6 hashMap.put('3', "def"); 7 hashMap.put('4', "ghi"); 8 hashMap.put('5', "jkl"); 9 hashMap.put('6', "mno"); 10 hashMap.put('7', "pqrs"); 11 hashMap.put('8', "tuv"); 12 hashMap.put('9', "wxyz"); 13 List<String> list = new ArrayList<>(); 14 if (digits == null || digits.length() == 0) { 15 return list; 16 } 17 getLeffters(digits, list,new StringBuilder(), 0,hashMap); 18 return list; 19 20 } 21 22 private void getLeffters(String digits, List<String> list, StringBuilder stringBuilder, int i,HashMap<Character,String> hashMap) { 23 if (i == digits.length()) { 24 list.add(stringBuilder.toString()); 25 return; 26 } 27 String str = hashMap.get(digits.charAt(i)); 28 29 for (int j = 0; j < str.length(); j++) { 30 stringBuilder.append(str.charAt(j)); 31 getLeffters(digits, list, stringBuilder, i + 1, hashMap); 32 stringBuilder.deleteCharAt(stringBuilder.length() - 1); 33 } 34 } 35 }