leetcode17. 电话号码的字母组合

导读:本篇文章讲解 leetcode17. 电话号码的字母组合,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com



题目

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
在这里插入图片描述

在这里插入图片描述

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思考

  • 1、使用递归回溯的方式来获取组合
  • 2、之前我们都是在一个数组中完成递归,那两个数组我们就在这题就不需要startIdx来控制到递归的位置了
  • 3、我们在定义递归参数的时候特别要注意
  • 4、你想清楚这一题的树型结构了吗【其实是每个按键组成的是一层】

代码和注释

/**
        使用回溯法
        1、确定递归函数的参数
        2、结束条件
        3、每轮递归干的事
     */
class Solution {
    // 临时路径字符串
    StringBuilder pathStr = new StringBuilder();
    // 存放结果集
    List<String> res = new ArrayList<>();


    
    public List<String> letterCombinations(String digits) {
        // 极端判断
        if(digits == null || digits.length()== 0){
            return res;
        }
        // 定义一个数组来存放字母
        String[] numToVal = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};

        backtacking(digits, numToVal, 0);
        return res;
    }
    // num 是用来标记digits的下标位置的(控制只要num个元素即可)
    public void backtacking(String digits, String[] numToVal, int num){
        // 终止条件(由题目可知,我们由几个数组,就要组合成多少个元素)
        // num控制的是for循环,也就是深度
        if(digits.length() == num){
            // 收集结果
            res.add(pathStr.toString());
            return;
        }
        // 每轮递归需要干的事
        // 获取我们在按的每个数字(ascii计算的)
        String str = numToVal[digits.charAt(num) - '0'];
        // str.length()这个控制的是每一层的宽度 
        for(int i = 0; i<str.length(); i++){
            pathStr.append(str.charAt(i));
            backtacking(digits, numToVal, num + 1);
            // 回溯
            pathStr.deleteCharAt(pathStr.length() - 1);

        }



    }
}

总结

  • 1、做到这题的时候对回溯有了一些新的理解
    • a:我们使用的for循环里面的条件其实就是我们每一层树节点的宽度
    • b:我们对递归的终止条件就是深度【其实就等价于我们目标值的长度,所有我们到对应的深度得到对应的深度的值,就没必要在向下递归来获取新的值了】

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/96132.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!