题目

image.png
image.png

代码

  1. class Solution {
  2. //设置全局列表存储最后的结果
  3. List<String> result = new ArrayList<>();
  4. //初始对应所有的数字,为了直接对应2-9,新增了两个无效的字符串""
  5. String[] numString = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
  6. //每次迭代获取一个字符串,所以会设计大量的字符串拼接,所以这里选择更为高效的 StringBuilder
  7. StringBuilder sb = new StringBuilder();
  8. public List<String> letterCombinations(String digits) {
  9. if(digits == null || digits.length() == 0 ) {
  10. return result;
  11. }
  12. backtracking(digits,0);
  13. return result;
  14. }
  15. public void backtracking(String digits,int num) {
  16. //遍历全部一次记录一次得到的字符串
  17. if(num == digits.length() ) {
  18. result.add(sb.toString() );
  19. return ;
  20. }
  21. //str 表示当前num对应的字符串
  22. String str = numString[ digits.charAt(num) - '0'];
  23. for(int i = 0; i < str.length(); i++ ) {
  24. sb.append(str.charAt(i) );
  25. //注意是num+1,不然会java.lang.StackOverflowError
  26. backtracking(digits,num + 1);
  27. //剔除末尾的继续尝试
  28. sb.deleteCharAt(sb.length() -1 );
  29. }
  30. }
  31. }