class Solution {
public List<String> letterCombinations(String digits) {
List<String> result = new ArrayList<>();
if ("".equals(digits)) {
return result;
}
Map<Character, List<Character>> map = new HashMap<>();
map.put('2', Arrays.asList('a', 'b', 'c'));
map.put('3', Arrays.asList('d', 'e', 'f'));
map.put('4', Arrays.asList('g', 'h', 'i'));
map.put('5', Arrays.asList('j', 'k', 'l'));
map.put('6', Arrays.asList('m', 'n', 'o'));
map.put('7', Arrays.asList('p', 'q', 'r', 's'));
map.put('8', Arrays.asList('t', 'u', 'v'));
map.put('9', Arrays.asList('w', 'x', 'y', 'z'));
dfs(digits, 0, "", map,result);
return result;
}
private void dfs(String digits, int start, String str, Map<Character, List<Character>> map, List<String> result) {
if (str.length() == digits.length()) {
result.add(str);
return;
}
char cur = digits.charAt(start);
for (char c : map.get(cur)) {
dfs(digits, start+1, str + String.valueOf(c), map, result);
}
}
}
/*
23
2 -> abc
3 -> def
2 a b c
/ | \
def def def
*/