解法一:深搜

建立字典,然后深度优先搜索

  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. class Solution {
  5. private static List<List<Character>> dict = new ArrayList<>();
  6. static {
  7. // 2-9
  8. dict.add(Arrays.asList('a', 'b', 'c'));
  9. dict.add(Arrays.asList('d', 'e', 'f'));
  10. dict.add(Arrays.asList('g', 'h', 'i'));
  11. dict.add(Arrays.asList('j', 'k', 'l'));
  12. dict.add(Arrays.asList('m', 'n', 'o'));
  13. dict.add(Arrays.asList('p', 'q', 'r', 's'));
  14. dict.add(Arrays.asList('t', 'u', 'v'));
  15. dict.add(Arrays.asList('w', 'x', 'y', 'z'));
  16. }
  17. private List<String> ans;
  18. public List<String> letterCombinations(String digits) {
  19. ans = new ArrayList<>((int) Math.pow(3, digits.length()));
  20. if (digits.length() == 0) {
  21. return ans;
  22. }
  23. build(digits.toCharArray(), 0, new char[digits.length()]);
  24. return ans;
  25. }
  26. private void build(final char[] strs, int index, char[] word) {
  27. if (index == strs.length) {
  28. ans.add(String.valueOf(word));
  29. return;
  30. }
  31. int digit = strs[index] - 50;
  32. for (char ch : dict.get(digit)) {
  33. word[index] = ch;
  34. build(strs, index + 1, word);
  35. }
  36. }
  37. }