题目详述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
分治法
class Solution {
List<String> results = new ArrayList<>();
private String digits;
public List<String> letterCombinations(String digits) {
this.results = results;
this.digits = digits;
if (digits == null || digits.length() == 0) return new ArrayList();
Map<Character, String> map = new HashMap<>();
map.put('2', "abc");
map.put('3', "def");
map.put('4', "ghi");
map.put('5', "jkl");
map.put('6', "mno");
map.put('7', "pqrs");
map.put('8', "tuv");
map.put('9', "wxyz");
recursion("", 0, map);
return results;
}
private void recursion(String result, int level, Map<Character, String> map) {
// terminator
if (level == digits.length()) {
results.add(result);
return;
}
// process the local logic
String letters = map.get(digits.charAt(level));
for (int j = 0; j < letters.length(); j++) {
// drill down
recursion(result + letters.charAt(j), level + 1, map);
}
// reverse
}
}