1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
public List<String> letterCombinations(String digits) {
char[] chars = digits.toCharArray();
Map<String, List<String>> keys = new HashMap<String, List<String>>();
keys.put("2", Arrays.asList("a", "b", "c"));
keys.put("3", Arrays.asList("d", "e", "f"));
keys.put("4", Arrays.asList("g", "h", "i"));
keys.put("5", Arrays.asList("j", "k", "l"));
keys.put("6", Arrays.asList("m", "n", "o"));
keys.put("7", Arrays.asList("p", "q", "r", "s"));
keys.put("8", Arrays.asList("t", "u", "v"));
keys.put("9", Arrays.asList("w", "x", "y", "z"));
List<String> result = new ArrayList<String>();
for (char c : chars) {
// 拿到输入的字符对应的字母集合
List values = keys.get(String.valueOf(c));
result = add(result, values);
}
return result;
}
/**
* @param old 已经有的组合
* @param now 又要添加的字符
* @return
*/
private List<String> add(List<String> old, List<String> now) {
if (old == null || old.size() == 0) {
// 如果之前没有组合,那新的字母就是所有的组合
old = now;
return old;
}
List<String> result = new ArrayList<String>();
for (String oldWord : old) {
for (String newWord : now) {
result.add(oldWord + newWord);
}
}
return result;
}
|