利用队列求解
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;
}
注:dict也可以用字符串数组来表示