LeetCode 17. 电话号码的字母组合 中等
题目 - 点击直达
- 1. 17. 电话号码的字母组合 中等
- 1. 题目详情
- 1. 原题链接
- 2. 题目要求
- 3. 基础框架
- 2. 解题思路
- 1. 思路分析
- 2. 时间复杂度
- 3. 代码实现
- 3. 知识与收获
1. 17. 电话号码的字母组合 中等
1. 题目详情
1. 原题链接
LeetCode 17. 电话号码的字母组合 中等
2. 题目要求
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 1:
输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
示例 2:
输入:digits = “”
输出:[]
示例 3:
输入:digits = “2”
输出:[“a”,“b”,“c”]
提示:
0 < = d i g i t s . l e n g t h < = 4 0 <= digits.length <= 4 0<=digits.length<=4
d i g i t s [ i ] digits[i] digits[i] 是范围 [ ′ 2 ′ , ′ 9 ′ ] ['2', '9'] [′2′,′9′]的一个数字。
3. 基础框架
● Cpp代码框架
class Solution {
public:vector<string> letterCombinations(string digits) {}
};
2. 解题思路
全排列、多叉树的前序遍历

1. 思路分析
( 1 ) (1) (1) 首先建立数字与对应多个字符的映射;
string aStr[10] = {“”, “”, “abc”, “def”, “ghi”,“jkl”,“mno”,“pqrs”,“tuv”,“wxyz”};
0和1不对应字母,2-9依次对应字符串。
( 2 ) (2) (2) 例如字符串 d i g i t s digits digits=[“237”],其中的2、3、4对应的字符串分别是[“abc”]、[“def”]、[“pqrs”];
组合的结果共有 3 ∗ 3 ∗ 4 = 36 3*3*4=36 3∗3∗4=36种,即先在[“abc”]中任取一个,然后在[“def”]中任取一个,最后在[“pqrs”]中任取一个,即 A 3 1 ∗ A 3 1 ∗ A 4 1 A_3^1 * A_3^1 * A_4^1 A31∗A31∗A41。
( 3 ) (3) (3) 把[“abc”]、[“def”]、[“pqrs”]分别看做多叉树的第一层、第二层、第三层;
对这颗多叉树进行深度优先遍历就可以依次得到组合的结果:
第一层[“abc”]首先选择第一个字符’a’,第二层[“def”]选择第一个字符’d’,第三层[“pqrs”]选择第一个字符’p’,这样到达最后一层时相当于完成了一次深度优先遍历,也得到了一种组合[“adp”];第三层共包含四个字符,故需要选择四次,共得到四种组合[“adp”、“adq”、“adr”、“ads”];
之后回到第二层[“def”],选择第二个字符’e’,第三层依次选择[“pqrs”]中的字符,得到四种组合[“aep”、“aeq”、“aer”、“aes”];
之后再回到第二层[“def”],选择第三个字符’f’,第三层依次选择[“pqrs”]中的字符,得到四种组合[“afp”、“afq”、“afr”、“afs”];
这样第一层字符为’a’的所有组合都选择了一遍,对第一层中’a’字符之后的剩余字符继续进行上述遍历操作,得到以该字母开头的所有组合;
( 4 ) (4) (4) 多叉树的遍历本质与二叉树相同,二叉树节点只有两个,递归时只需递归左右子树即可;多叉树节点则有多个,递归时需要依次递归所有子树;
( 5 ) (5) (5) 递归函数的设计:
引用类型的结果二维数组vector<string>& ret;
引用类型的字符串类型string& digits:所有栈帧都用到初始字符串参数;
int类型的index:当前栈帧内所在的digits的下标,也代表这在第几层,超过范围时类似于二叉树中节点为nullptr;
string类型的一种结果字符串string comStr:每一层都会从当前层选择一个字符与comStr进行组合,当最后一层的字符与其组合后,便是一种结果,该结果继续传递给最后一层的下一层,在最后一层的下一层并不存在,此时i是越界的,函数将返回,再返回之前需要把最后一层得到并传入的结果尾插到结果二维数组中;
2. 时间复杂度
O ( 4 N ) O(4^N) O(4N)
范围[2, 9]数字对应的字符最少有 3 3 3个,最多有 4 4 4个,假设输入的数字长度为 N N N,且输入的数字对应的字符都是 4 4 4个。 N N N个数字对应 N N N个长度为 4 4 4的字符串,对一个长度为 4 4 4的字符串进行 4 4 4次选择,则对 N N N个长度为 4 4 4的字符串进行 4 N 4^N 4N次选择。
3. 代码实现
class Solution {const static string aStr[10];
public:// 多叉树、回溯、全排列void combin(vector<string>& ret, const string& digits, int i, string comStr){// 递归结束条件if(i >= digits.size()){ret.push_back(comStr);return;}// 深度递归int index = digits[i] - '0';for(int j = 0; j < aStr[index].size(); ++j){combin(ret, digits, i + 1, comStr + aStr[index][j]);}}vector<string> letterCombinations(string digits) {vector<string> ret;if(digits.empty()) return ret;combin(ret, digits, 0, "");return ret;}
};
const string Solution::aStr[10] = {"", "", "abc", "def", "ghi","jkl","mno","pqrs","tuv","wxyz"};
3. 知识与收获
( 1 ) (1) (1) 二叉树深度优先遍历、回溯
T h e The The E n d End End
相关文章:
LeetCode 17. 电话号码的字母组合 中等
题目 - 点击直达 1. 17. 电话号码的字母组合 中等1. 题目详情1. 原题链接2. 题目要求3. 基础框架 2. 解题思路1. 思路分析2. 时间复杂度3. 代码实现 3. 知识与收获 1. 17. 电话号码的字母组合 中等 1. 题目详情 1. 原题链接 LeetCode 17. 电话号码的字母组合 中等 2. 题目要…...
《GPT与AI助手:技术进步与就业前景》
随着人工智能的迅速发展,像GPT(Generative Pre-trained Transformer)这样的自然语言处理技术已经广泛应用于各个领域,各个互联网公司也纷纷推出了自己的AI助手来帮助创作、交流和解决问题。这一技术的广泛应用引发了一系列关于就业…...
线性代数 | 矩阵运算 加减 数乘 矩阵的幂运算
文章目录 1 矩阵加减和数乘2 矩阵与矩阵的乘法2.1 相乘条件:看中间,取两头2.2 相乘计算方法 3 矩阵的幂3.1 观察归纳法3.2 邻项相消法3.3 化为对角 4 判断是否可逆(证明题或者要求求出逆矩阵)4.1 直接观察4.2 由定义式推得4.2.1 待…...
Linux---(五)三大工具yum、vim、gcc/g++
文章目录 一、yum工具1.Linux中安装软件的方法:2.什么是yum?3.yum源更新 二、Linux编辑器--vim1.IDE例子2.vim(1)vim的常用模式及切换模式(2)底层模式常用命令(3)插入模式常用命令(…...
网络通信TCP、UDP详解
目录 IP 和端口 网络传输中的 2 个对象:server 和 client 两种传输方式:TCP/UDP TCP 和 UDP 原理上的区别 为何存在 UDP 协议 TCP/UDP 网络通信大概交互图 IP 和端口 所有的数据传输,都有三个要素 :源、目的、长度。 怎么表…...
Flutter笔记:绘图示例 - 一个简单的(Canvas )时钟应用
Flutter笔记 绘图示例 - 一个简单的(Canvas )时钟应用 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_2855…...
Bard和ChatGPT的一些比较
Bard和ChatGPT的一些比较 2023.11.8版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 选择正确的自动文本生成工具对企业至关重要。本文将详细分析谷歌 Bard 和 ChatGPT 的优缺点,以帮助企业做出明智的选择。无论企业关注的是客…...
centos7安装Nexus(Maven私服)与配置使用教程
之前有位大佬问我,他说有个第三方的Jar包,在idea导出库中使用,现在要部署上线测试,要如何导进去打包。 我说,不用那么麻烦,搞个Nexus私服,将Jar上传上去,然后配置Maven的setting文件…...
Azure 机器学习 - 有关为 Azure 机器学习配置 Kubernetes 群集的参考
目录 受支持的 Kubernetes 版本和区域建议的资源计划ARO 或 OCP 群集的先决条件禁用安全增强型 Linux (SELinux)ARO 和 OCP 的特权设置 收集的日志详细信息Azure 机器学习作业与自定义数据存储连接支持的 Azure 机器学习排斥和容许最佳实践 通过 HTTP 或 HTTPS 将其他入口控制器…...
使用微信小程序控制蓝牙小车(微信小程序端)
目录 使用接口界面效果界面设计界面逻辑设计 使用接口 微信小程序官方开发文档 接口说明wx.openBluetoothAdapter初始化蓝牙模块wx.closeBluetoothAdapter关闭蓝牙模块(调用该方法将断开所有已建立的连接并释放系统资源)wx.startBluetoothDevicesDiscovery开始搜寻附近的蓝牙…...
【react hook】react hook组件中,在forEach中使用async/awati进行异步操作,为什么后面代码没有等待直接同步运行了呢?
这是因为 forEach 方法不会等待 async/await 异步操作的完成。forEach 方法是一种同步的方法,它会在每个迭代内部同步执行一个回调函数。当遇到 await 时,会立即暂停执行,但是 forEach 方法不会等待回调函数中的 await 异步操作完成ÿ…...
高斯过程回归 | GPR高斯过程回归
高斯过程回归(Gaussian Process Regression, GPR)是一种强大的非参数回归方法,它通过假设数据是从一个高斯过程中生成的来预测新的数据点。 高斯过程是一种定义在连续输入空间上的随机过程,其中任何有限集合的观测值都呈多变量高斯分布。 实现GPR的Python代码import numpy …...
[autojs]逍遥模拟器和vscode对接
第一步:启动autojs服务 第二步:去cmd查看ip地址,输入ipconfig 第三步:打开逍遥模拟器中的sutojs-左上角- 连接电脑,然后输入WLAN或者其他ip也行,根据自己电脑实际情况确认 此时vscode显示连接成功。我们写…...
Docker 安装与优化
一、安装Docker 1、关闭防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 02、安装依赖包 yum -y install yum-utils device-mapper-persistent-data lvm2#解释 yum-utils #提供了yum-config-manager工具 device mapper #是linux内核中支持逻辑卷…...
Wix使用velo添加Google ads tag并在form表单提交时向谷歌发送事件
往head里加代码时,不能看谷歌的代码,要看wix的代码,不然必定踩坑 https://support.wix.com/en/article/tracking-google-ads-conversions-using-wix-custom-code 这里的代码才对,因为wix搞了个velo,这个velo很傻x&am…...
Centos配置邮件发送
在CentOS Linux上配置邮件发送 在这个指南中,我们将讨论如何配置CentOS Linux系统以通过外部邮件服务器发送电子邮件,使用自己的邮件账户进行发送。 第一步:开启SMTP授权码 首先,我们以QQ邮箱为例,需要开启SMTP授权…...
Ubuntu系统使用apt-get管理软件工具
记录一下使用Ubuntu系统的apt-get管理软件工具 先查看一下系统的版本,可以看到这里使用的是Ubuntu20.04版本,版本代号focal rootmyw:~# uname -a Linux myw 5.4.0-70-generic #78-Ubuntu SMP Fri Mar 19 13:29:52 UTC 2021 x86_64 x86_64 x86_64 GNU/L…...
带你走进Cflow (三)·控制符号类型分析
目录 编辑 1、控制符号类型 1.1 语法类 1.2 符号别名 1.3 GCC 初始化 1、控制符号类型 有人也许注意到了输出中奇怪的现象:函数_exit 丢失了,虽然它在源文件中被printdir 调用了两次。这是因为默认情况下 cflow 忽略所有的一下划线开头的符号…...
FPGA UDP RGMII 千兆以太网(3)ODDR
1 xilinx原语 在 7 系列 FPGA 中实现 RGMII 接口需要借助 5 种原语,分别是:IDDR、ODDR、IDELAYE2、ODELAYE2(A7 中没有)、IDELAYCTRL。其中,IDDR和ODDR分别是输入和输出的双边沿寄存器,位于IOB中。IDELAYE2和ODELAYE2,分别用于控制 IO 口输入和输出延时。同时,IDELAYE2 …...
OSG交互:选中场景模型并高亮显示
1、目的 可以在osg视图中选中指定模型实体,并高亮显示。共分为两种,一种鼠标点选,一种框选。 2、鼠标点选 2.1 功能说明 生成两组对象,一组cow对象可以被选中,另一组robot不能被选中;点击cow对象被选中高亮,点击robot被选中不高亮;点击空白处,弹出“select nothing!…...
3分钟永久激活Windows和Office:KMS_VL_ALL_AIO智能脚本终极指南
3分钟永久激活Windows和Office:KMS_VL_ALL_AIO智能脚本终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows激活弹窗烦恼?Office突然变成只读模式让你束…...
2026最稳代练创业项目:三角洲护航系统——全端部署+智能匹配,破解获客与信任难题
一、项目核心价值:低成本搭建,100%利润掌控 传统代练模式依赖第三方平台抽成(20%-50%),利润被严重压缩。而三角洲护航系统基于UniAppThinkPHP6架构,支持微信小程序、H5、APP、PC端多端同步,创业…...
DeepSeek融资3亿美元:是向资本低头,还是Agent时代的战略补给?
【DeepSeek融资消息引发猜测】4月17日,The Information放出消息,DeepSeek正在和部分机构洽谈融资事宜,目标至少3亿美元,估值超过100亿。消息传开后,不少观点认为梁文锋开始扛不住了,DeepSeek缺钱并尝试商业…...
基于深度学习的YOLO11的河道垃圾识别 海洋垃圾检测与垃圾分类项目介绍
文章目录基于YOLOv8的河道及海洋垃圾检测与垃圾分类项目介绍一、YOLOv8简介二、项目背景与意义三、基于YOLOv8的垃圾检测与分类系统四、数据集构建五、具体训练代码教程六、结论…...
推送通知实现长连接与消息队列
推送通知在现代应用中扮演着至关重要的角色,无论是社交媒体的即时消息、电商平台的订单提醒,还是金融应用的交易通知,都离不开高效稳定的推送机制。而长连接与消息队列作为实现推送通知的两大核心技术,能够确保消息的实时性和可靠…...
使用 Keepalived 实现高可用
在当今互联网服务中,高可用性是保障业务连续性的关键。无论是电商平台、金融系统还是在线服务,任何短暂的中断都可能造成巨大损失。Keepalived作为一款轻量级的高可用解决方案,通过虚拟IP(VIP)和健康检查机制ÿ…...
企业知识库问答系统的详细架构图
离线链路:把企业知识加工进知识库- 在线链路:用户提问后,检索、推理、生成答案总架构图──离线建库链路───────────────────────────────────数据源Confluence / SharePoint / 钉盘 / 飞书文档 / Git / …...
LAV Filters完全指南:让你的Windows媒体播放体验焕然一新
LAV Filters完全指南:让你的Windows媒体播放体验焕然一新 【免费下载链接】LAVFilters LAV Filters - Open-Source DirectShow Media Splitter and Decoders 项目地址: https://gitcode.com/gh_mirrors/la/LAVFilters 你是否曾经在Windows上播放视频时遇到格…...
大数据开发中常见的排序算法
大数据处理中,排序算法需兼顾效率与可扩展性。 主流方案包括: 1)Timsort作为混合排序算法,适应Spark等分布式场景; 2)外部排序通过分片归并解决内存限制; 3)基数排序适合固定长度数据; 4)BitonicSort专为并…...
C++格式化输出踩坑实录:setprecision和fixed到底怎么用?一个例子讲清楚
C格式化输出深度解析:setprecision与fixed的实战陷阱与解决方案 在金融交易系统开发过程中,我曾遇到一个令人费解的bug:当处理欧元兑美元汇率时,1.23456789被正确显示为1.2346,但当数值变为12.3456789时,输…...
