力扣17题 电话号码的字母组合 Java版

class Solution {
          
   
    // 保存结果
    List<String> res = new ArrayList<>();
    // 数字与字符串映射
    String[] map = {
          
   "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
    // 暂存字符串
    StringBuilder sb = new StringBuilder();

    public List<String> letterCombinations(String digits) {
          
   
        if(digits==null || digits.length() ==0){
          
   
            return res;
        }
        backTraking(digits,0);
        return res;
    }

    // index 表示digits的第index个字符,index从0算起
    public void backTraking(String digits,int index){
          
   
        // 当index到达digits的末尾,指向空时,收集结果
        if(index == digits.length()){
          
   
            res.add(sb.toString());
            return;
        }
        // 根据当前的index 得到digits字符串的第index个字符对应的字符串,例如 "23" 对应的第一个字符串为abc
        String temp = map[digits.charAt(index)-0];
        // 遍历temp字符串的每一个字符
        for(int i=0; i<temp.length(); i++){
          
   
            sb.append(temp.charAt(i));
            // 递归
            backTraking(digits,index+1);
            // 回溯
            sb.deleteCharAt(sb.length()-1);
        }
    }
}

运行结果:

经验分享 程序员 微信小程序 职场和发展