leetcode17. 电话号码的字母组合

news2024/11/15 23:42:09

文章目录

  • 题目
  • 思考
  • 代码和注释
  • 总结


题目

给定一个仅包含数字 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:我们对递归的终止条件就是深度【其实就等价于我们目标值的长度,所有我们到对应的深度得到对应的深度的值,就没必要在向下递归来获取新的值了】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/31782.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机毕业设计】5.网上书店系统maven源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘要 随着Internet的发展&#xff0c;人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化、网络化和电子化。网上销售&#xff0c;它将是直接市场营销的最新形式。本论文是以构建网上书店系统为…

善网ESG周报(第一期)

ESG报告&#xff1a; 诺基亚最新ESG报告已出炉 报告显示&#xff0c;诺基亚的ESG战略着重于环境、工业数字化、安全和隐私、缩小数字鸿沟、以及企业责任。 Lazada 发布首份ESG报告&#xff1a;为东南亚六国创造约110万经济机会 报告提出&#xff0c;Lazada在区域赋能方面、…

BGP进阶:BGP 综合实验二

实验拓扑及说明 设备编号及互联线路如图所示&#xff1b;所有设备的互联地址段采用10.1.xy.0/24&#xff0c;其中xy为设备编号&#xff0c;x为编号较小的设备&#xff0c;y为编号较大的设备。例如R2及R3之间的直连链路&#xff0c;网段为10.1.23.0/24&#xff0c;这条链路上R2的…

2023年系统规划与设计管理师-第一章信息的综合知识

1. 思维导图 2.信息补充 2.1 信息的传输模型 2.2 信息质量的七大属性 2.3 信息化的基本内涵 2.4 电子商务类型 2.5 电子商务类型 2.6 电子商务的特征 2.7 电子商务的基础设施 2.8 加快商务发展的基本原则 2.9 企业信息化 2.10 信息系统的组成部分 2.11 信息系统的生命周期 2.12…

世界杯 | 中国首次承建世界杯主赛场,基建狂魔用BIM征服世界杯

hi&#xff0c;家人们&#xff0c;我是建模助手。 呐&#xff0c;一如既往地&#xff0c;这次世界杯中国除了球队&#xff0c;其他基本都去了卡塔尔&#xff0c;我可不是在搞幽默&#xff0c;本次世界杯可真是中国元素满满—— 包括但不限于Made in China的纯电大巴、无人驾驶地…

技术分享 | 无人驾驶汽车的眼睛

根据智能化程度的不同&#xff0c;自动驾驶被分为5个等级&#xff1a;L1辅助驾驶、L2部分自动驾驶、L3有条件自动驾驶、L4高度自动驾驶、L5完全自动驾驶&#xff0c;即真正的无人驾驶。 日渐活跃于公众视野的“无人驾驶”概念&#xff0c;往往是指L3及以上级别的自动驾驶。目前…

深度解析为什么做深度学习,都用python,而不用java或者c++

前言 Python是解释语言&#xff0c;这让写程序方便不只一点。举例来说&#xff0c;在C等编译语言里写一个矩阵乘法&#xff0c;需要自己分配操作数&#xff08;矩阵&#xff09;的、分配结果的内存、手动对BLAS接口调用gemm、最后如果没用smart pointer还得手动回收内存空间。P…

看完这篇SpringBoot让我在阿里成功涨薪40%,感谢

前言&#xff1a; SpringBoot的好处是把Java2EE的各项技术的整合变得非常的简单&#xff0c;但是也有它的缺点&#xff0c;它的封装性太强&#xff0c;如果你想了解SpringBoot底层的原理&#xff0c;你必须对SpringMvc、Spring注解等比较了解&#xff0c;你才能更好的去了解Sp…

Jenkins项目中有中文文件出错处理

jenkins build的时候报 ... Malformed input or input contains unmappable characters... 提示是由于项目中有中文文件名&#xff0c;乱码处理不了 ERROR: Build step failed with exception java.nio.file.InvalidPathException: Malformed input or input contains unmappab…

Java学习之继承二细节(学习重点)

目录 继承细节 第一条 父类代码 子类代码 测试代码 运行结果 第二条 第三条 第三条-1 第三条-2 第四条 一、调用父类Base的无参构造器 二、一个参数的构造器 三、两个参数的构造器 第五条 第六条 第七条 第八条 第九条 第十条 继承细节 第一条 子类继承了父类所有的…

用DIV+CSS技术设计的美食主题网站(web前端网页制作课作业)美食餐饮网站设计与实现(HTML+CSS+JavaScript)

&#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计&#x1f469;‍&#x1f393;,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等&#xff0c;用的最多的还是DW&#xff0c;当然不同软件写出的…

ImmunoChemistry艾美捷总细胞毒性试验试剂盒方案

ImmunoChemistry艾美捷总细胞毒性试验试剂盒是一种单管三色试验&#xff0c;用于定量评估细胞凋亡和坏死引起的细胞介导的细胞溶解活性。该试验采用绿色荧光细胞染色剂CFSE标记靶细胞&#xff0c;红色活/死活力染料7-AAD用于识别细胞毒性试验样品中存在的死细胞&#xff0c;橙红…

【前端验证】fork-join_none线程立即执行的一次代码优化记录

我们的目标是┏ (゜ω゜)☞芯片前端全栈工程师~喵&#xff01; 前言 【system verilog】fork-join_none与循环语句共同使用的行为探究 很早之前写过关于fork-join_none的探究文章&#xff0c;最近被人指出了一些错误&#xff1a; 我仔细理解了下他的意思&#xff0c;觉得确实…

电容笔和触控笔有什么区别?平价好用的电容笔排行榜

从导电材料、作用机理、用途等方面来看&#xff0c;电容笔与一般的触摸笔有很大区别。电容笔的笔头设计为中等大小&#xff0c;笔头材料通常更耐磨损。随着技术的发展&#xff0c;人们的生活水平越来越高&#xff0c;人们都想要一支更好用的电容笔&#xff0c;不管是图纸绘画&a…

Java真的不难(五十一)SpringBoot使用EasyExcel实现导出

EasyExcel&#xff1a; 大家好久不见&#xff01; 一、什么是EasyExcel&#xff1f; EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。 github地址: https://github.com/alibaba/easyexcel 官方文档地址&#xf…

MAC安装redis的简单方法

使用mac的包管理工具brew一行命令搞定安装。若未安装brew&#xff0c;命令行先输入以下命令安装brew。 /bin/bash -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" brew install redis6.2 brew services restart redis6.2 一、安装…

三台服务器使用docker搭建redis一主二从三哨兵,概念-搭建-整合springboot【保姆级】

一、前言 redis在我们企业级开发中是很常见的&#xff0c;但是单个redis不能保证我们的稳定使用&#xff0c;所以我们要建立一个集群。 redis有两种高可用的方案&#xff1a; High availability with Redis Sentinel&#xff08;哨兵&#xff09;Scaling with Redis Cluster&…

FT 在图像处理中的应用

接上文&#xff1a;离散傅里叶变换(DFT) 四、二维傅里叶变换 在此之前&#xff0c;文章都是对 FT 的理论部分的科普推导&#xff0c;距离我们的实际应用还有一定距离 虽然之前提到函数时域时&#xff0c;都是默认我们以时间 t 作为自变量&#xff0c;但事实上自变量也可以是其…

小册上新 | 掌握 SpringBoot 场景整合,成为开发多面手!

只会 SpringBoot 还远远不够 SpringBoot 的强大不言而喻&#xff0c;其底层 SpringFramework 强大的 IOC 容器和 AOP 机制&#xff0c;加之 SpringBoot 的自动装配&#xff0c;使得 SpringBoot 成为当今 JavaEE 开发中最受欢迎&#xff0c;以及使用范围极其广泛的基本技术。 …

[附源码]计算机毕业设计JAVA领导干部听课评课管理系统

[附源码]计算机毕业设计JAVA领导干部听课评课管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM…