Keypad Permutation

Problem

Phone has letters on the number keys. for example, number 2 has ABC on it, number 3 has DEF, 4 number has GHI,... , and number 9 has WXYZ. Write a program that will print out all of the possible combination of those letters depending on the input.  

 

Solution


HashMap

 1 public static ArrayList<String> letterCombinations(String digits) {
 2   StringBuilder sb = new StringBuilder();
 3   ArrayList<String> res = new ArrayList<String>();
 4   
 5     if(digits == null) {
 6         return res;
 7     }
 8     
 9     //hashmap to store the key pad info
10     Map<Character, char[]> hm = new HashMap<Character, char[]>();
11     hm.put('2', new char[]{'a', 'b', 'c'});
12     hm.put('3', new char[]{'d', 'e', 'f'});
13     hm.put('4', new char[]{'g', 'h', 'i'});
14     hm.put('5', new char[]{'j', 'k', 'l'});
15     hm.put('6', new char[]{'m', 'n', 'o'});
16     hm.put('7', new char[]{'p', 'q', 'r', 's'});
17     hm.put('8', new char[]{'t', 'u', 'v'});
18     hm.put('9', new char[]{'w', 'x', 'y', 'z'});
19     
20     helper(digits, res, sb, hm, 0);
21     
22     return res;
23 
24 }
25 
26 public static void helper(String digits, ArrayList<String> res, StringBuilder sb, Map<Character, char[]> hm, int pos) {
27   if(pos == digits.length()) {
28       res.add(sb.toString());
29       return;
30   }
31   
32   for(int i=0; i<hm.get(digits.charAt(pos)).length; i++) {
33       sb.append(hm.get(digits.charAt(pos))[i]);
34       helper(digits, res, sb, hm, pos+1);
35       sb.deleteCharAt(sb.length()-1);
36   }
37 }

 

posted on 2014-11-21 09:30  SuperBo  阅读(164)  评论(0编辑  收藏  举报