LeetCode 17. 电话号码的字母组合 中等

news2025/4/12 4:16:07

题目 - 点击直达

  • 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 334=36种,即先在[“abc”]中任取一个,然后在[“def”]中任取一个,最后在[“pqrs”]中任取一个,即 A 3 1 ∗ A 3 1 ∗ A 4 1 A_3^1 * A_3^1 * A_4^1 A31A31A41
( 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

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

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

相关文章

后端架构选择:构建安全强大的知识付费小程序平台

构建知识付费小程序平台需要考虑后端架构&#xff0c;确保系统安全性、性能和可扩展性。以下是一些常见的后端技术和最佳实践&#xff0c;能帮助您构建强大且安全的知识付费小程序平台。 1. 服务器端语言和框架选择 选择流行、成熟的后端语言和框架&#xff0c;如Node.js、P…

基于php js+mysql+laravel技术架构的手术麻醉管理系统源码 手麻系统源码

PHP手术麻醉管理系统源码 手麻系统源码 手术麻醉管理系统定义&#xff1a; 手术麻醉系统主要是由麻醉信息管理和监护设备数据采集系统两个部分组成&#xff0c;主要是将麻醉信息和从监护仪器上采集到的数据以及手术信息进行统计。 手术麻醉系统是指专用于住院患者手术与麻醉…

AR工业眼镜:智能化生产新时代的引领者!!

科技飞速发展&#xff0c;人工智能与增强现实&#xff08;AR&#xff09;技术结合正在改变生活工作方式。AR工业眼镜在生产领域应用广泛&#xff0c;具有实时信息展示、智能导航定位、远程协作培训、智能安全监测等功能&#xff0c;提高生产效率、降低操作风险&#xff0c;为企…

网络通信TCP、UDP详解

目录 IP 和端口 网络传输中的 2 个对象&#xff1a;server 和 client 两种传输方式&#xff1a;TCP/UDP TCP 和 UDP 原理上的区别 为何存在 UDP 协议 TCP/UDP 网络通信大概交互图 IP 和端口 所有的数据传输&#xff0c;都有三个要素 &#xff1a;源、目的、长度。 怎么表…

开机自启动笔记本的小键盘

虽然电脑开机次数不多&#xff0c;但每次开机都要摁下小键盘的开关&#xff0c;好烦 终于忍不住了&#xff1a; 将下面文件命名为 XXX.bat echo off rem 禁用批处理文件中的命令回显&#xff0c;以使输出更整洁rem 查询注册表中 "InitialKeyboardIndicators" 的值 r…

devops完整搭建教程(gitlab、jenkins、harbor、docker)

devops完整搭建教程&#xff08;gitlab、jenkins、harbor、docker&#xff09; 文章目录 devops完整搭建教程&#xff08;gitlab、jenkins、harbor、docker&#xff09;1.简介&#xff1a;2.工作流程&#xff1a;3.优缺点4.环境说明5.部署前准备工作5.1.所有主机永久关闭防火墙…

ChatGPT-4:OpenAI的革命性升级

在人工智能领域&#xff0c;OpenAI这家公司凭借其创新性的技术&#xff0c;成为了备受瞩目的领导者。他们最近发布的ChatGPT-4&#xff0c;以其卓越的语言处理能力和先进的模型架构&#xff0c;引领了语言模型领域的革命性升级。 ChatGPT-4的模型容量相较于前一版本有了显著的提…

各种业务场景调用API代理的API接口教程(附带电商平台api接口商品详情数据接入示例)

API代理的API接口在各种业务场景中具有广泛的应用&#xff0c;本文将介绍哪些业务场景可以使用API代理的API接口&#xff0c;并提供详细的调用教程和代码演示&#xff0c;同时&#xff0c;我们还将讨论在不同场景下使用API代理的API接口所带来的好处。 哪些业务场景可以使用API…

Android 图层列表 、 LayerDrawable 、 layer-list \ 改变 seekbar thumb 滑块 的颜色

android 官网 &#xff1a; 图层列表 LayerDrawable / layer-list LayerDrawable 是管理其他可绘制对象数组的可绘制对象。列表中的每个可绘制对象均按照列表顺序绘制。列表中的最后一个可绘制对象绘于顶部。 每个可绘制对象均由单个 <layer-list> 元素内的 <item>…

万能在线预约小程序系统源码 适合任何行业在线预约小程序+预约到店模式 带完整的搭建教程

大家好啊&#xff0c;源码小编又来给大家分享啦&#xff01;随着互联网的发展和普及&#xff0c;越来越多的服务行业开始使用在线预约系统以方便客户和服务管理。例如&#xff0c;美发店、健身房、餐厅等都可以通过在线预约系统提高服务效率&#xff0c;减少等待时间&#xff0…

云计算、大数据技术的智慧工地,实现对建筑工地实时监测、管理和控制的一种新型建筑管理方式

智慧工地是利用物联网、云计算、大数据等技术&#xff0c;实现对建筑工地实时监测、管理和控制的一种新型建筑管理方式。 智慧工地架构&#xff1a; 1、终端层&#xff1a; 充分利用物联网技术、移动应用、智能硬件设备提高现场管控能力。通过RFID、传感器、摄像头、手机等终…

Liunx终极环境搭建

华子目录 网络服务准备工作安装RHEL9系统部署RHEL9操作系统虚拟网络编辑器配置RHEL9系统系统中的设置更换yum源修改主机名关闭selinux&#xff0c;firewalld设置静态ip &#xff08;网络配置&#xff09; 网络服务 准备工作 以下为RHEL9镜像资源&#xff0c;有需要的博友们可…

【蓝桥杯选拔赛真题17】C++时间换算 第十二届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析

目录 C/C++时间换算 一、题目要求 1、编程实现 2、输入输出 二、算法分析 <

华为云Ascend310服务器使用

使用华为云服务器 cpu: 16vCPUs Kunpeng 920 内存&#xff1a;16GiB gpu&#xff1a;4* HUAWEI Ascend 310 cann: 20.1.rc1 操作系统&#xff1a;Ubuntu aarch64目的 使用该服务器进行docker镜像编译&#xff0c;测试模型。 已知生产环境&#xff1a;mindx版本为3.0.rc3&a…

Blender--》点线面操作及其面操作的详解

接下来我会在three.js专栏中分享关于3D建模知识的文章&#xff0c;如果学习three朋友并且想了解和学习3D建模&#xff0c;欢迎关注本专栏&#xff0c;关于这款3D建模软件blender的安装&#xff0c;我在前面的文章已经讲解过了&#xff0c;如果不了解的朋友可以去考考古&#xf…

百度智能云正式上线Python SDK版本并全面开源!

文章目录 1. SDK的优势2. 千帆SDK&#xff1a;快速落地LLM应用3. 如何快速上手千帆SDK3.1 SDK快速启动3.2 SDK进阶指引3.3 通过Langchain接入千帆SDK 4. 开源社区 百度智能云千帆大模型平台再次升级&#xff01;在原有API基础上&#xff0c;百度智能云正式上线Python SDK&#…

启动Docker服务后显示Docker Engine stopped

1、重新启动Docker服务&#xff1a;打开Windows服务管理器&#xff08;可以在开始菜单中搜索&#xff09;&#xff0c;找到"Docker Desktop Service"或类似命名的服务&#xff0c;右键单击并选择"重启"。稍等片刻&#xff0c;看看是否重新启动成功 2、尝试…

Python 编码最全梳理

为什么要写这篇文章呢&#xff1f;这里就要提到某一天&#xff0c;工作的时候&#xff0c;突然发现自己在编码方面&#xff0c;一窍不通。实在惭愧 字符编码是计算机技术的基石&#xff0c;对于程序员来说尤其重要&#xff0c;字符编码的知识是必须要懂的 编码入门知识 ASCI…

【博士每天一篇文献-算法】Echo State Network with Hub Property

阅读时间&#xff1a;2023-11-1 1 介绍 年份&#xff1a;2019 作者&#xff1a;李凡军&#xff0c;济南大学数学科学学院&#xff0c;济南 期刊&#xff1a;Proceedings of 2019 Chinese Intelligent Automation Conference 引用量&#xff1a;1 2 创新点 通过模拟枢纽特性…

原型制作神器ProtoPie的使用Unity与网页跨端交互

什么是ProtoPie&#xff1f; ProtoPie是一款面向设计师的软件原型设计工具&#xff0c;例如制作App界面交互展示&#xff0c;制作好的原型可以一键发布到Web服务器&#xff0c;就可以浏览器访问。由于其内置了大量常用交互类型&#xff0c;以及"程序化"模块&#xf…