image.png
image.png
image.png

思路

典型的树形问题,对于输入的数字字符串 23
image.png
2代表3种可能,基于a b c考虑下面的情况
image.png
可以看到解决这个问题的思路隐藏在一棵树中,因此成为树形问题
因此也可以使用递归结构来解决问题
image.png
依次类推

code

  1. class Solution {
  2. //定义每个数字对应的字母
  3. private final String[] letterMap = {
  4. "abc",
  5. "def",
  6. "ghi",
  7. "jkl",
  8. "mno",
  9. "pqrs",
  10. "tuv",
  11. "wxyz" //9
  12. };
  13. private List<String> res = new ArrayList<>();
  14. //每次对digits[index]的元素拼接上之前的元素
  15. //s中保存的是此时从digits[0....index-1]翻译得到的字符串
  16. //寻找和digits[index]匹配的数字,获得digits[0....index]翻译得到的解
  17. private void findCombinatin(String digits,int index,String s){
  18. //如果遍历到头 则得到了一个解
  19. if(index==digits.length()){
  20. res.add(s);
  21. return;
  22. }
  23. //获取对应的数字
  24. char c = digits.charAt(index);
  25. //得到对应的字母
  26. String letters = letterMap[c-'2'];
  27. //递归拼接上每一个字母 递归对下一个元素 此时拼接上之前的元素
  28. for(char ch:letters.toCharArray())
  29. findCombination(digits,index + 1,s + ch);
  30. }
  31. public List<String> letterCombinations(String digits) {
  32. //空字符
  33. if(digits.equals(""))
  34. return res;
  35. //初始index为0 s=""
  36. findCombinatin(digits,0,"");
  37. return res;
  38. }
  39. }