解法一:深搜
建立字典,然后深度优先搜索
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
private static List<List<Character>> dict = new ArrayList<>();
static {
// 2-9
dict.add(Arrays.asList('a', 'b', 'c'));
dict.add(Arrays.asList('d', 'e', 'f'));
dict.add(Arrays.asList('g', 'h', 'i'));
dict.add(Arrays.asList('j', 'k', 'l'));
dict.add(Arrays.asList('m', 'n', 'o'));
dict.add(Arrays.asList('p', 'q', 'r', 's'));
dict.add(Arrays.asList('t', 'u', 'v'));
dict.add(Arrays.asList('w', 'x', 'y', 'z'));
}
private List<String> ans;
public List<String> letterCombinations(String digits) {
ans = new ArrayList<>((int) Math.pow(3, digits.length()));
if (digits.length() == 0) {
return ans;
}
build(digits.toCharArray(), 0, new char[digits.length()]);
return ans;
}
private void build(final char[] strs, int index, char[] word) {
if (index == strs.length) {
ans.add(String.valueOf(word));
return;
}
int digit = strs[index] - 50;
for (char ch : dict.get(digit)) {
word[index] = ch;
build(strs, index + 1, word);
}
}
}