代码编织梦想



题目

给定一个仅包含数字 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:我们对递归的终止条件就是深度【其实就等价于我们目标值的长度,所有我们到对应的深度得到对应的深度的值,就没必要在向下递归来获取新的值了】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46643875/article/details/128005411

leetcode 17. 电话号码的字母组合_calcky的博客-爱代码爱编程

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. 说明: 尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序

leetcode 17. 电话号码的字母组合_侯夏琰的博客-爱代码爱编程

17. 电话号码的字母组合 随机一题 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. 说明:

leetcode17. 电话号码的字母组合-爱代码爱编程

题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:"23" 输出:["ad", "ae", "af", "

leetcode 17.电话号码的字母组合-爱代码爱编程

leetcode 17.电话号码的字母组合 题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. 说明:

Leetcode17. 电话号码的字母组合-爱代码爱编程

Leetcode17. 电话号码的字母组合 题目: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. 说明: 尽管上面

Leetcode 17. 电话号码的字母组合-爱代码爱编程

Leetcode 17. 电话号码的字母组合 1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/   本质上就是一个深搜问题。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果

leetcode17.电话号码的字母组合-爱代码爱编程

题目: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:digits = “23” 输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”] 思路: 使用字典来存

LeetCode 17.电话号码的字母组合 全排列 每日一题-爱代码爱编程

问题描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。   示例 1: 输入:digits = "23" 输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

leetcode: 17. 电话号码的字母组合_uncle_ll的博客-爱代码爱编程

17. 电话号码的字母组合 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/letter-combinations-of-a-phone-number/ 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意

代码随想录算法训练营第二十五天| leetcode216. 组合总和 iii、leetcode17. 电话号码的字母组合_喵的博客-爱代码爱编程

一、LeetCode216. 组合总和 III         1:题目描述(216. 组合总和 III)         找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次          返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。      

刷题看力扣,刷了两个月 leetcode 算法,顺利拿下百度、阿里等大厂的 offer_java程序v的博客-爱代码爱编程

随着互联网寒潮的到来, 越来越多的互联网公司提高了面试的难度,其中之一就是加大了面试当中手撕算法题的比例。这里说的算法题不是深度学习,机器学习这类的算法,而是排序,广度优先,动态规划这类既考核数据结构也考核编程能力的题目。刷题的网址非常的多,其中以 leetcode 是最为出名的。 在刷题上,我花了大量的时间,蹚了许多的坑,总结了一下,主要有这三个问题:

代码随想录算法训练营第四十四天| leetcode518. 零钱兑换 ii、leetcode377. 组合总和 Ⅳ_喵的博客-爱代码爱编程

一、LeetCode518. 零钱兑换 II         1:题目描述(518. 零钱兑换 II)         给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。         请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。         假设每一种面额的

leetcode hot 100 —— 23.合并k个升序链表_hdu-五七小卡的博客-爱代码爱编程

题目 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 思路 在做本题之前,先考虑一下,如何合并两个有序链表,见 21.合并两个有序链表 最直接的思路就是,用一

算法学习 | 深度优先搜索~一条道走到黑_li_yizya的博客-爱代码爱编程

目录 员工的重要性 图像渲染  岛屿的周长  被围绕的区域 岛屿数量    深度优先搜索(Depth First Search):深度优先搜索属于图算法的一种,其过程主要是对每一个可能的分支路径深入到不能再深入到为止,而且每个节点只能访问一次。深度优先搜索本质上就是暴力搜索,遍历了所有可能的情况,必然能得到解。DFS搜索的流程是一

leetcode337打家劫舍3刷题打卡_水番茄的博客-爱代码爱编程

337. 打家劫舍 III - 力扣(Leetcode) 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。 除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明

leetcode 17. 电话号码的字母组合-爱代码爱编程

题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 思路 比较简单的一个回溯,有手就行。。。。

leetcode栈和队列练习-爱代码爱编程

文章目录 前言1.力扣20. 有效的括号1.题目分析 2.代码示现2.力扣225. 用队列实现栈1.题目分析2.代码实现 3.力扣232. 用栈实现队列1.题目分析2.代码实现 4.力扣622