解法一:深搜
建立字典,然后深度优先搜索
import java.util.ArrayList;import java.util.Arrays;import java.util.List;class Solution {private static List<List<Character>> dict = new ArrayList<>();static {// 2-9dict.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);}}}
