电话字母的组合
电话字母的组合
http://www.nowcoder.com/questionTerminal/5044a44afe6c40ec9b67b7531393e854
利用队列求解
public ArrayList<String> letterCombinations(String digits) { ArrayList<String> res = new ArrayList<String>(); HashMap<Character, String> dict = new HashMap<Character, String>(); dict.put('2', "abc"); dict.put('3', "def"); dict.put('4', "ghi"); dict.put('5', "jkl"); dict.put('6', "mno"); dict.put('7', "pqrs"); dict.put('8', "tuv"); dict.put('9', "wxyz"); Queue<String> queue = new LinkedList<String>(); // 先往队列中加入一个空字符串,以便和digits的第一个字符进行拼接 queue.offer(""); // 遍历数字字符串, for (char c : digits.toCharArray()) { // 当前数字对应的字母列表 String words = dict.get(c); // 计算队列长度 int n = queue.size(); for (int i = 0; i < n; i++) { // 每次从队列取出一个元素,并和当前words中每一个字母进行拼接 String cur = queue.poll(); for (int j = 0; j < words.length(); j++) { queue.offer(cur + words.charAt(j)); } } } res.addAll(queue); return res; }