【算法Hot100系列】电话号码的字母组合

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 一.题目描述
      • 1.题目信息
      • 2.题目地址
      • 3.测试示例
      • 4.提示信息
    • 二.题解
      • 1.回溯算法
      • 2.解题思路
      • 3.注意事项
    • 三.自我分析
      • 1.解题思路
      • 2.思考链路

一.题目描述

1.题目信息

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

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

image-20231218110016843

2.题目地址

题目地址

3.测试示例

示例 1:

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

示例 2:

输入:digits = ""
输出:[]

示例 3:

输入:digits = "2"
输出:["a","b","c"]

4.提示信息

提示:

  • 0 <= digits.length <= 4
  • digits[i] 是范围 ['2', '9'] 的一个数字。

二.题解

1.回溯算法

private static HashMap<Character, String> map = new HashMap<>();static {map.put('2', "abc");map.put('3', "def");map.put('4', "ghi");map.put('5', "jkl");map.put('6', "mno");map.put('7', "pqrs");map.put('8', "tuv");map.put('9', "wxyz");
}private List<String> res = new ArrayList<>();
private StringBuilder stringBuilder = new StringBuilder();public List<String> letterCombinations(String digits) {if (digits.length() == 0) {return res;}//排列组合dfs(digits, 0);return res;
}private void dfs(String digits, int index) {//遍历完了所以得数字if (index == digits.length()) {res.add(stringBuilder.toString());return;}//获取当前的数字-字符串String letters = map.get(digits.charAt(index));for (int i = 0; i < letters.length(); i++) {//逐个添加到结果集中stringBuilder.append(letters.charAt(i));//递归处理下一个字符dfs(digits, index + 1);//剪枝处理stringBuilder.deleteCharAt(index);}
}

2.解题思路

  1. 将数字和字符串用 map 进行对应
  2. 遍历每一个数字
  3. 在遍历当前数字对应的字符串时,递归处理字符串的所有字符
  4. 剪枝上一个数字

3.注意事项

  • 数字和字符的对应关系
  • 画一个排列组合树结构
  • 回溯就是递归
  • 剪枝的优化处理

三.自我分析

1.解题思路

if 有思路开写
else去看相关标签,确定具体解题方法if 有思路开写else看提示信息if 有思路开写else看答案

2.思考链路

  • 没有思路
  • 多做,多思考
  • 形成自己的肌肉记忆
  • 多多调试
  • 多总结
  • 多回头看看以前的题目,温故而知新

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA自定义setter和getter格式

设置之前 设置之后 设置方法 Alt INSERT选择生成Get/Set方法 1. 选择模板 2. 创建自己的模板 3. 模板内容 #if($field.modifierStatic) static ## #end $field.type ## #if($field.recordComponent)${field.name}## #else#set($name $StringUtil.capitalizeWithJavaBeanCo…

Axure的交互与情形,事件,动作

交互样式 交互样式是指当用户与原型进行交互时&#xff0c;元素所呈现出的视觉效果。在Axure中&#xff0c;可以通过设置交互样式来调整元素在交互过程中的外观&#xff0c;例如改变颜色、大小、位置等。 交互事件 交互事件是指在用户与原型进行交互时触发的动作。在Axure中&…

思码逸关钦杰:聊聊研效管理中的数据操纵

3月25日&#xff0c;思码逸咨询总监、研发过程提效专家关钦杰在 QECon 质效城市论坛【深圳站】分享了主题为《聊聊研效管理中的数据操纵》的演讲。 以下内容根据关钦杰老师分享内容整理&#xff1a; 在生活中&#xff0c;当我们去描述客观事实的时候&#xff0c;我们经常要用…

spring 笔记九 Spring AOP

Spring 的 AOP 简介 什么是AOP AOP 为Aspect Oriented Programming 的缩写&#xff0c;意思为面向切面编程&#xff0c;是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP 是OOP 的延续&#xff0c;是软件开发中的一个热点&#xff0c;也是Spring框架…

Redis最实用的基础入门数据结构和常用指令使用教程

1.单线程redis操作为什么那么快&#xff1f; 一方面&#xff0c;Redis 的大部分操作在内存上完成&#xff0c;再加上它采用了高效的数据结构&#xff0c;例如哈希表和跳表&#xff0c;这是它实现高性能的一个重要原因。另一方面&#xff0c;就是 Redis 采用了多路复用机制&…

Python语言学习笔记之八(文件IO)

本课程对于有其它语言基础的开发人员可以参考和学习&#xff0c;同时也是记录下来&#xff0c;为个人学习使用&#xff0c;文档中有此不当之处&#xff0c;请谅解。 1、什么是文件I/O 在Python中&#xff0c;文件IO&#xff08;输人/输出)是指与文件进行交互的过程。这包括读…

电平转换器引脚为什么不能悬空

一&#xff0e;引言 在《三相交流电机驱动频繁炸机的原因梳理》一文中提到一种现象&#xff0c;SN74LVC4245ADWR芯片由于输入引脚没有接下拉&#xff0c;输出引脚的状态不定&#xff0c;有可能是低电平&#xff0c;也有可能是脉冲输出。 为什么SN74LVC4245ADWR输入引脚不接下拉…

带你走进向量数据库的世界,从AWS向量引擎开始讲起

在这个数字化爆炸的时代&#xff0c;数据成为了网络科技企业竞争的核心资源&#xff0c;就像是第二次工业革命时期&#xff0c;各个工业国家对于石油煤炭资源的竞争一样。为了更好地管理和利用数据&#xff0c;向量数据库应运而生。作为一种新兴的数据库类型&#xff0c;向量数…

QT Widget - 随便画个圆

简介 实现在界面中画一个圆, 其实目的是想画一个LED效果的圆。代码 #include <QApplication> #include <QWidget> #include <QPainter> #include <QColor> #include <QPen>class LEDWidget : public QWidget { public:LEDWidget(QWidget *pare…

API的定义|电子商务网站搭建中API的应用

从技术上讲&#xff0c;API是应用程序编程接口的首字母缩写&#xff0c;被认为是构建应用软件的一组协议。实际上&#xff0c;API 是让人们保持数字联系的大部分基础。 从我们手机上的应用程序到复杂的飞行控制系统&#xff0c;API 将原本完全不同的系统组合在一起以创建单一…

MySQL通过Binlog日志恢复数据库

一、MySQL Binlog 简介 MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志&#xff0c;它记录了所有的 DDL 和 DML 语句&#xff08;除了数据查询语句select、show等&#xff09;&#xff0c;以事件形式记录&#xff0c;还包含语句所执行的消耗的时间&#xff0c;MySQL的…

Sui 概览:技术特色与生态发展现状

作者&#xff1a;stellafootprint.network 数据来源&#xff1a;Sui Overview Sui 区块链的推出是区块链技术进一步革新的标志。该链由 Mysten Labs 倾力打造&#xff0c;其团队成员曾在 Meta 拥有卓越的职业成就。Sui 是一个无需许可的 Layer 1&#xff0c;在上线主网之前就…