当前位置: 首页 > news >正文

[Java·算法·中等]LeetCode17. 电话号码的字母组合

每天一题,防止痴呆

  • 题目
  • 示例
  • 分析思路1
  • 题解1
  • 分析思路2
  • 题解2

题目

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

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

在这里插入图片描述

示例

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
输入:digits = ""
输出:[]
输入:digits = "2"
输出:["a","b","c"]

分析思路1

可以使用递归的方式来实现。
使用了一个数组来保存数字与字母的对应关系。在递归过程中,我们不断地向已有的组合中添加新的字母,直到所有数字都被处理完毕。

题解1

class Solution {// 定义数组存储每个数字对应的字母,下标0和1均为空private final String []  arr = new String[]{"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};public List<String> letterCombinations(String digits) {List<String> res = new ArrayList<>();if(digits == null || digits.length() == 0){return res;}backtrack(digits, 0, "", res);return res;}private void backtrack(String digits, int index, String combination, List<String> res){if(index == digits.length()){res.add(combination);return;}// 利用char变量使用 ASCII进行算术运算这一特征,可以得到一种间接计算获取数值的方法// '0'-'9'  ASCII 为 48-57,且顺序一致,因而char数字之间的差值等于数字之间的差值String letters = arr[digits.charAt(index) - '0'];for(int i = 0; i < letters.length(); i++){backtrack(digits, index + 1, combination + letters.charAt(i), res);}}
}

执行结果
在这里插入图片描述

分析思路2

使用回溯算法进行求解。
首先,定义一个哈希表,将每个数字对应的字母存入其中,以便后续查找。
然后,定义一个结果列表 res,用于存储所有的字母组合。
接着,调用回溯函数 backtrack,该函数的参数为当前要处理的电话号码字符串 digits、当前要处理的字符索引 index、当前已经组合好的字母字符串 combination 和结果列表 res。
在回溯函数中,首先判断当前要处理的字符索引是否等于电话号码字符串的长度,如果是,说明已经处理完了所有的字符,此时将当前已经组合好的字母字符串 combination 添加到结果列表 res 中,并返回。
如果当前要处理的字符索引小于电话号码字符串的长度,说明还有字符需要处理。首先从哈希表中获取当前数字对应的字母列表 letters,然后依次枚举其中的每个字母,并将其添加到当前已经组合好的字母字符串 combination 的末尾,然后递归调用回溯函数 backtrack,处理下一个字符。
在递归返回后,需要将当前已经组合好的字母字符串 combination 的末尾字符删除,以便后续枚举其他字母。

题解2

class Solution {private Map<Character, String> phone = new HashMap<Character, String>() {{put('2', "abc");put('3', "def");put('4', "ghi");put('5', "jkl");put('6', "mno");put('7', "pqrs");put('8', "tuv");put('9', "wxyz");}};public List<String> letterCombinations(String digits) {List<String> res = new ArrayList<String>();if (digits.length() == 0) {return res;}backtrack(digits, 0, new StringBuilder(), res);return res;}private void backtrack(String digits, int index, StringBuilder combination, List<String> res) {if (index == digits.length()) {res.add(combination.toString());return;}char digit = digits.charAt(index);String letters = phone.get(digit);for (int i = 0; i < letters.length(); i++) {combination.append(letters.charAt(i));backtrack(digits, index + 1, combination, res);combination.deleteCharAt(index);}}
}

执行结果
在这里插入图片描述

相关文章:

[Java·算法·中等]LeetCode17. 电话号码的字母组合

每天一题&#xff0c;防止痴呆题目示例分析思路1题解1分析思路2题解2题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。…...

C#7/C#8/C#9 与dotnetSDK 以及dotnet framework对应关系

语言版本 对应的.net framework版本 对应的.net sdk版本 推荐使用的vs studio C#7.3 3.5、 4.0、 4.5 、4.5.1、 4.5.2 、4.6 、4.6.1、 4.6.2 4.7.1、 4.7.2 .netcore 2.0、.netcore2.1、 .netcore2.2 C#8.0 / F#4.7 不支持 .netcore 3.0、.netcore 3.1 C# 9.0 …...

jvm调优经验总结

最近一段时间很忙&#xff0c;忙到每天10点多11点下班还是感觉有很多事没有做完&#xff0c;不过倒也没有什么太过低落的情绪&#xff0c;有时候只安静的看一个视频&#xff0c;简单看点文字&#xff0c;或者平静的坐着&#xff0c;并没有太多想法。短时间的工作压力是可以接受…...

等保合规知识常见问题解答

Q1&#xff1a;什么是等级保护&#xff1f; 答&#xff1a;等级保护是指对国家重要信息、法人和其他组织及公民的专有信息以及公开信息和存储、传输、处理这些信息的信息系统分等级实行安全保护&#xff0c;对信息系统中使用的信息安全产品实行按等级管理&#xff0c;对信息系统…...

分享5款Windows同类软件中的翘楚

今天要给大家推荐的是5款软件&#xff0c;每个都是同类软件中的个中翘楚&#xff0c;请大家给我高调地使用起来&#xff0c;不用替我藏着掖着。1.沙盒工具——Sandboxie Sandboxie是一个电脑必备的沙盘工具&#xff0c;对于从网上下载的软件安装包、文件、视频、图片等等一切不…...

记--springboot-工具类中使用@Component、@Resource与@Value失效

写一个工具类 需要使用Resource注入RedisTemplate 使用Value获取application.properties配置文件中配置 并使用Component将该工具类交个spring管理 调试的时候RedisTemplate以及所有的变量全是是null 看了网上的各种解决方式五花八门 有的说出现问题的原因&#xff1a;Compon…...

手写一个react,看透react运行机制

适合人群 本文适合0.5~3年的react开发人员的进阶。 讲讲废话&#xff1a; react的源码&#xff0c;的确是比vue的难度要深一些&#xff0c;本文也是针对初中级&#xff0c;本意让博友们了解整个react的执行过程。 写源码之前的必备知识点 JSX 首先我们需要了解什么是JSX。…...

JS判断输入值是否为正整数,判断变量是否为数字

这篇文章将讨论如何确定一个变量是否代表 JavaScript 中的有效数字。 1.JS中的test是原来是JS中检测字符串中是否存在的一种模式&#xff0c;JS输入值是否为判断正整数代码&#xff1a; <script type”text/javascript”> function test() { var num document.getElem…...

Android开发八股文,Android也有自己的八股文了

前言别的行业都有自己的八股文&#xff0c;凭什么Android没有。2023春招即将来临&#xff0c;很多同学会问 Android开发的面试题有必要背吗&#xff1f;我的回答是&#xff1a;很有必要。你可以讨厌这种模式&#xff0c;但你一定要去背&#xff0c;因为不背你就进不了大厂。国内…...

你需要同款“Unreal项目自动化编译、打包和部署”方案吗?

在过往几期的UWA Pipeline最佳实践案例中&#xff0c;我们分享了如何通过Pipeline实现性能优化、性能管理、游戏内容验收和云真机系统的应用&#xff08;实现批量真机设备的自动化测试&#xff0c;以及针对特效性能优化的方式&#xff09;&#xff0c;其实这些高效的方法并不局…...

电子技术——CMOS-AB类输出阶

电子技术——CMOS-AB类输出阶 本节我们研究CMOS-AB类输出阶。 经典配置 下图展示了一个经典的CMOS-AB类输出阶&#xff1a; 这个很像BJT二极管偏置版本的AB类输出阶&#xff0c;在这里二极管偏置变成了 Q1Q_1Q1​ 和 Q2Q_2Q2​ 偏置。不想BJT的情况&#xff0c;这里 QNQ_NQN​…...

2023王道考研数据结构笔记第二章线性表

第二章 线性表 2.1 线性表的定义 2.1.1 线性表的基本概念 线性表是具有相同数据类型的n(n>0)个数据元素的有限序列&#xff0c;其中n为表长&#xff0c;当n0时线性表是一个空表。若用L命名线性表&#xff0c;则其一般表示为&#xff1a; L(a1,a2,...,ai,ai1,...,an)L(a_1…...

[chapter 11][NR Physical Layer][Layer Mapping]

前言&#xff1a;这里参考Curious Being系列 &#xff0c;简单介绍一下NR 5G 物理层核心技术层映射.我们主要讲了一下what is layer Mapping, why need layer Mapping, how layer Mapping 参考文档&#xff1a;3GPP 38.211- 6.3.1.3 Layer mapping《5G NR Physical Layer | Cha…...

什么是工业物联网(IIoT)?

什么是工业物联网(IIoT)?工业物联网(IIoT) 被定义为一组设备和应用&#xff0c;允许大企业创建从核心到边缘的端到端连接环境。其还包括传统的物理基础设施&#xff0c;如集装箱和物流卡车&#xff0c;以收集数据&#xff0c;对事件做出反应&#xff0c;并在智能设备的帮助下做…...

「TCG 规范解读」PC 平台相关规范(4)

可信计算组织&#xff08;Ttrusted Computing Group,TCG&#xff09;是一个非盈利的工业标准组织&#xff0c;它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立&#xff0c;并采纳了由可信计算平台联盟&#xff08;the Trusted Computing Platform Alli…...

CSS背景属性之颜色渐变

颜色渐变 颜色渐变其实在网页设计中并不是特别常见&#xff0c; 但也不可避免的会出现导航栏是渐变色这种情况或者别的不是单一颜色的情况&#xff0c; 例如&#xff1a;这样的设计解决方案并不是只可以使用颜色渐变&#xff0c;我们可以使用两个div拼接&#xff0c;将文字放…...

IPv4地址细讲

文章目录一、IPv4地址简介二、IPv4地址的表示方法点分十进制记法三、IP地址的分类四、特殊IPv4地址&#xff1a;全 “0” 和全 “1”五、常用的三类IP地址使用范围六、五类IP地址的范围一、IPv4地址简介 IPv4地址分5类&#xff0c;每一类地址都由固定长度的字段组成&#xff1…...

sql语句中exists用法详解

文章目录一、语法说明exists&#xff1a;not exists&#xff1a;二、常用示例说明1.查询a表在b表中存在数据2.查询a表在b表中不存在数据3.查询时间最新记录4.exists替代distinct剔除重复数据总结一、语法说明 exists&#xff1a; 括号内子查询sql语句返回结果不为空&#xff…...

思迅软件端口不通导致软件和软锁报错的问题

一、端口不通导致软件和软锁报错的问题 问题说明&#xff1a;打开软件提示到&#xff1a;xxx.xxx.xxx.xxx失败&#xff01; 处理步骤1&#xff1a; 假设软锁服务器IP为192.168.0.1&#xff0c;分别在服务器本机和客户端电脑测试软锁服务: 在服务器的浏览器中访问地址: http:/…...

Docker之路(7.DockerFile文件编写、DockerFile 指令解释、CMD与ENTRYPOINT的区别)

1.DockerFile介绍 dockerfile 是用来构建docker镜像的文件&#xff01;命令参数脚本&#xff01; 构建步骤&#xff1a; 编写一个dockerfile文件docker build构建成为一个镜像docker run 运行镜像docker push发布镜像&#xff08;DockerHub、阿里云镜像仓库&#xff09; 2.Dock…...

[软件测试]如何使用Eclipse导入项目并打开

&#x1f9d1;‍&#x1f393;个人介绍&#xff1a;大二软件生&#xff0c;现学JAVA、Linux、MySQL、算法 &#x1f4bb;博客主页&#xff1a;渡过晚枫渡过晚枫 &#x1f453;系列专栏&#xff1a;[编程神域 C语言]&#xff0c;[java/初学者]&#xff0c;[蓝桥杯] &#x1f4d…...

emplace_back与push_back异同

vector的emplace_back与push_back 文章目录vector的emplace_back与push_back前言1.区别总览2.push_back支持右值引用不支持传入多个构造参数总是会进行拷贝构造3.emplace_backemplace_back可以接受多个构造参数支持原地构造前言 在vector中&#xff0c;通过push_back与emplace_…...

【C语言航路】第十五站:程序环境和预处理

目录 一、程序的翻译环境和执行环境 二、编译和链接 1.翻译环境 2.编译本身也分为几个阶段 3.运行环境 三、预处理 1.预定义符号 2.#define 1.#define定义标识符 2.#define定义宏 3.#define 替换规则 4.#和## 5.带副作用的宏参数 6.宏和函数的对比 7.命名约定 …...

Vue3 - 获取 Proxy 对象代理中包裹的 “真实数据“,解决对象或数组打印后是 Proxy 对象无法拿到原始数据的问题(提供 2 种详细解决方案)

前言 在 Vue3 中很多数据都被 Proxy 代理对象 “包裹”(无法拿到其真正的原始数据),另外就是请求回来的数据,例如通过 res.data.data 拿到了一个数组对象格式的数据。但是这个数据被 Proxy 包裹,你根本拿不到值无法进行处理。 本文实现了 Vue3 取到被 proxy 对象包裹的原始…...

ESP32设备驱动-ML8511紫外线传感器驱动

ML8511紫外线传感器驱动 1、ML8511介绍 ML8511 是一款紫外线传感器,适用于室内或室外获取紫外线强度。 ML8511 配备了一个内部放大器,可根据紫外线强度将光电流转换为电压。 这种独特的功能提供了与 ADC 等外部电路的简单接口。 在掉电模式下,典型的待机电流为 0.1 μ \mu…...

SC12B触摸感应芯片评测方案(1)

MM32F0160SC12B Touch Application Evaluation 文章目录MM32F0160SC12B Touch Application EvaluationIntroduction & RequirementHardwareSC12B & SC12B Sample Demo boardMini-F0160 boardSoftwareMCU Software - MM32F0160PC Tool - FreeMASTERSummaryIntroduction …...

企业如何实现精细化人员管理?五大业务场景值得关注

近年来&#xff0c;随着大数据、人工智能和云计算等信息技术不断升级与渗透&#xff0c;处在数字化变革的劳动力密集型企业希望利用更加智能化的劳动力管理软件&#xff0c;帮助企业实现规范化的管理。 面对企业劳动力管理理念的变化&#xff0c;以及数字化转型的发展渗透&…...

C/C++每日一练(20230301)

目录 1. 冒泡排序法排序 ★ 2. 有效的数独 ★★ 3. 不同的二叉搜索树 II ★★ 附录 二叉搜索树 1. 冒泡排序法排序 输入n&#xff08;1≤n≤10&#xff09;个整数&#xff0c;用冒泡排序法对其从小到大排序&#xff0c;共进行n-1趟&#xff0c;要求输出每一趟的排序情…...

Vue项目中components组件的使用笔记

目录 前言 一、components和component的区别&#xff1f; 二、components使用的步骤 1.创建组件vue文件 2.引入组件 3.注册组件 4.应用组件 总结 前言 本文章&#xff0c;只是初步了解记录components的使用步骤。 一、components和component的区别&#xff1f; compo…...

2023软件测试行情不行了?

一、2023年软件测试行业的现状 2020年开年&#xff0c;一不小心&#xff0c;【新冠】黑天鹅从头上飘过&#xff0c;持续影响全国乃至全球的经济&#xff0c;软件行业公司也迎来了不少的冲击&#xff0c;那么一个值得打算入行软件测试行业&#xff0c;或者已经在软件测试行业耕耘…...

成品网站灬源码1688/友妙招链接

lds后缀的文件是一个linker script&#xff0c;是一个链接器脚本文件。它用来描述链接器要如何链接生成一个目标执行文件&#xff0c;一般我们在编译C语言程序时&#xff0c;都不会创建lds文件&#xff0c;那是因为libc中已经暗含了链接文件。如果我们编译一个汇编文件&#xf…...

网赌网站做流量渗透/微信小程序开发多少钱

AutoJs一键解密是一款电脑上的AutoJs脚本文件解密工具&#xff0c;有了它&#xff0c;你可以对任何一个AutoJs脚本进行一键解密操作。具体使用情况请有需要的朋友前来西西下载&#xff01;软件初衷最近论坛用AutoJS编写的脚本程序越来越多&#xff0c;每次审核都要拖进手机才能…...

定制型网站制作哪家好/媒体资源网

python2 中 pip install uniout 示例 复制代码 >>> from pprint import pprint >>> langs [ ... Hello, world!, ... 你好&#xff0c;世界&#xff01;, ... こんにちは世界, ... uHello, world!, ... u你好&#xff0c;世界&#xff01;, ... uこんにち…...

建设网站联系方式/seo工作流程图

QByteArray ba("Hello world");char *data = ba.data();while (*data) {cout << "[" << *data...

一起做网站17怎么下单/企业网站模板图片

小升初奥数综合训练(十八十九)余数和同余【知识要点】1、例如&#xff1a;375&#xff1d;7……2&#xff0c;四者之间的数量关系&#xff1a;被除数除数商余数2、同余的概念&#xff1a;两个整数&#xff0c;被同一个大于1的整数m除&#xff0c;所得余数如果相同&#xff0c;那…...

简述网站建设过程步骤/东莞互联网推广

作者&#xff1a;范军 &#xff08;Frank Fan&#xff09; 新浪微博&#xff1a;frankfan7 微信&#xff1a;frankfan7在【DevOps】谁说大象不能跳舞?一文之后&#xff0c;本文对DevOps的理念作进一步探讨。最近在读一本书《Project Phoenix》&#xff0c;用小说的方式来描述…...