17. 电话号码的字母组合(力扣LeetCode)

文章目录

  • 17. 电话号码的字母组合
    • 回溯算法

17. 电话号码的字母组合

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

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

示例 1:

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

示例 2:

输入:digits = “”
输出:[]

示例 3:

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

提示:

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

回溯算法

class Solution {
public:// 主函数,接受一个数字字符串,返回可能的字母组合。vector<string> letterCombinations(string digits) {// 如果输入的字符串为空,则直接返回空的结果集。if (digits.size() == 0) {return result;}// 开始回溯过程,从第0个字符开始。backstracking(digits, 0);// 返回最终的字母组合结果集。return result;}private:// 用来存储最终的字母组合结果。vector<string> result;// 用作路径记录,记录当前的字母组合。string path;// 映射数组,index对应的字符串表示电话按键上数字所代表的所有字母。// 注意:0和1并不对应任何字母,故留空。string a[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};// 回溯函数,s为输入的数字字符串,index为当前处理的层级索引。void backstracking(string& s, int index) {// 如果路径字符串的长度和数字字符串的长度相同,说明找到了一个完整的字母组合。if (path.size() == s.size()) {// 将当前路径添加到结果集中。result.push_back(path);return;}// 获取当前数字字符对应的所有可能字母。string b = a[s[index] - '0'];// 遍历这些字母。for (int i = 0; i < b.size(); i++) {// 将当前字母加到路径中。path.push_back(b[i]);// 递归调用回溯函数,处理下一个数字字符。backstracking(s, index + 1);// 回溯,移除路径末尾的字母,以尝试下一个可能字母。path.pop_back();}// 当前分支处理完毕,返回上一级。return;}
};

代码中使用了回溯算法的模板,这是求解排列组合类问题的常用方法。函数backstracking是核心,它会递归地探索所有可能的字母组合,每次递归调用都会向一个组合中添加一个字母,直到得到一个完整的字母组合然后将其添加到结果集中。函数中使用了path变量来存储当前的字母组合状态,并在每次递归返回之前进行回溯,以便尝试下一个可能的字母组合。

请注意,代码中使用的变量result和path是私有成员,它们在多次调用回溯函数时保持状态。变量a是一个映射数组,它将数字映射到对应的所有可能字母上。这种映射正是根据电话按键布局定义的。

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

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

相关文章

js方法 提前结束循环

http://t.csdnimg.cn/j0gkOhttp://t.csdnimg.cn/j0gkO 一、各种循环方法如何跳出整个循环&#xff1f; 对于forEach()方法&#xff0c;目前似乎没有比较优雅的跳出整个循环的方法&#xff0c;如果你实在要用forEach()方法并且需要在某种条件下跳出整个循环提高遍历效率&#x…

政安晨:【掌握AI的深度学习工具Keras API】(二)—— 【使用内置的训练循环和评估循环】

渐进式呈现复杂性&#xff0c;是指采用一系列从简单到灵活的工作流程&#xff0c;并逐步提高复杂性。这个原则也适用于模型训练。Keras提供了训练模型的多种工作流程。这些工作流程可以很简单&#xff0c;比如在数据上调用fit()&#xff0c;也可以很高级&#xff0c;比如从头开…

uniapp实战:父子组件传参之子组件数量动态变化

需求说明 现有的设置单元列表,每个带有虚线加号的可以看做是一组设置单元,点击加号可以添加一组设置单元.点击设置单元右上角可以删除对应的设置单元. 实现思路说明 利用数组元素添加或是删除的方式实现页面数量动态变化.由于每个设置单元内容都相同所以单独封装了一个子组件.…

高效备考2025年AMC8数学竞赛:2000-2024年AMC8真题练一练

如何提高小学和初中数学成绩&#xff1f;小学和初中可以参加的数学竞赛有哪些&#xff1f;不妨了解一下AMC8美国数学竞赛&#xff0c;现在许多小学生和初中生都在参加这个比赛。如果孩子有兴趣&#xff0c;有余力的话可以系统研究AMC8的历年真题&#xff0c;即使不参加AMC8竞赛…

YOLOv9大幅度按比例减小模型计算量!加快训练!

一、代码及论文链接&#xff1a; 代码链接&#xff1a;GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information 论文链接&#xff1a;https://github.com/WongKinYiu/yolov9/tree/main 二…

深入理解Nginx,腾讯T3大佬亲自讲解

开头 25岁那年&#xff0c;我从京东离职&#xff0c;入职百度。 在百度认识了当时的架构师久哥&#xff08;T9级别&#xff09;&#xff0c;因为他的一番话&#xff0c;彻底改变了我的职业生涯&#xff0c;短短三年的时间&#xff0c;我从一枚普通程序员成长为别人眼中的技术…

信号:pause、alarm、kill;第二个项目:基于Mplayer的视频播放器

我要成为嵌入式高手之2月29日Linux高编第十二天&#xff01;&#xff01; 学习笔记 信号 1、pause int pause(void); 功能&#xff1a;让进程睡眠直到接收到捕捉的信号才能继续向下执行 2、alarm unsigned int alarm(unsigned int seconds); 功能&#xff1a;定时secon…

02| JVM堆中垃圾回收的大致过程

如果一直在创建对象&#xff0c;堆中年轻代中Eden区会逐渐放满&#xff0c;如果Eden放满&#xff0c;会触发minor GC回收&#xff0c;创建对象的时GC Roots&#xff0c;如果存在于里面的对象&#xff0c;则被视为非垃圾对象&#xff0c;不会被此次gc回收&#xff0c;就会被移入…

深度学习500问——Chapter02:机器学习基础(1)

文章目录 前言 2.1 基本概念 2.1.1 大话理解机器学习本质 2.1.2 什么是神经网络 2.1.3 各种常见算法图示 2.1.4 计算图的导数计算 2.1.5 理解局部最优与全局最优 2.1.5 大数据与深度学习之间的关系 2.2 机器学习学习方式 2.2.1 监督学习 2.2.2 非监督式学习 2.2.3 …

TVM 和模型优化的概述(1)

文章目录 1. 从 Tensorflow、PyTorch 或 Onnx 等框架导入模型&#xff08;model&#xff09;。2.翻译成 Relay3. lower 到 张量表达式。4. 使用 auto-tuning 模块 AutoTVM 或 AutoScheduler 搜索最佳 schedule。5. 选择最佳配置进行模型编译。6. lower 到 TIR。7. 编译成机器码…

波奇学Linux:共享内存

进程通信的前提&#xff1a;不同的进程看到同一份的资源 直接原理:同一块物理内存映射到不同进程的共享区 共享内存拆解&#xff1a; 1.申请内存&#xff0c;通过页表映射到进程地址空间 2.返回首地址&#xff0c;便于进程利用 3.释放共享内存&#xff0c;去关联 4.内存的申请…

flex的5种常见使用

Flex 布局教程&#xff1a;语法篇 文章目录 一.基本概念二 例子 其实我每次记一个样式标签,都是根据英文来记,但是justify-content和align-items确实让我迷惑,这次我打算只记 justify-content属性定义了项目在主轴上的对齐方式,好好总结一下用法~ 一.基本概念 采用 Flex 布局…

SpringBoot 事务失效及其对应解决办法

简介 本文主要讲述Spring事务会去什么情况下失效及其解决办法 Spring 通过AOP 进行事务控制&#xff0c;如果操作数据库报异常&#xff0c;则会进行回滚&#xff1b;如果没有报异常则会提交事务&#xff1b;但是&#xff0c;如果Spring 事务失效&#xff0c;会导致数据缺失/重…

Quartz与Spring Task的区别

1、相同点&#xff1a; 两者均能实现定时调度任务 2、Quartz ① 默认多线程异步执行 ② 单个任务时&#xff0c;在上一个调度未完成时&#xff0c;下一个调度时间到时&#xff0c;会另起一个线程开始新的调度。业务繁忙时&#xff0c;一个任务会有多个调度&#xff0c;可能导…

DAY65: 图论入门797、200、695

深度优先搜索 深度优先搜索按照一个方向一直搜索直到截止&#xff0c;再回溯换搜索方向。 搜索方向&#xff0c;是认准一个方向搜&#xff0c;直到碰壁之后再换方向换方向是撤销原路径&#xff0c;改为节点链接的下一个路径&#xff0c;回溯的过程 因为需要回溯&#xff0c;…

【STM32】STM32学习笔记-独立看门狗和窗口看门狗(47)

00. 目录 文章目录 00. 目录01. WDG概述02. 独立看门狗相关API2.1 IWDG_WriteAccessCmd2.2 IWDG_SetPrescaler2.3 IWDG_SetReload2.4 IWDG_ReloadCounter2.5 IWDG_Enable2.6 IWDG_GetFlagStatus2.7 RCC_GetFlagStatus 03. 独立看门狗接线图04. 独立看门狗程序示例105. 独立看门…

简单排列组合题(python版)

文章预览&#xff1a; 题目解法一输出结果 解法二输出结果输出结果 题目 有四个数字:1,2,3,4能组成多少个互不相同且无重复的数字的三位数? 各式多少? 解法一 我们粗略看一下这个题既然我们要组成三位数&#xff0c;那我们就循环3层每一层出一个数&#xff0c;并且if语句判…

OD(12)之Mermaid思维导图(Mindmap)

OD(12)之Mermaid思维导图(Mindmap)使用详解 Author: Once Day Date: 2024年2月29日 漫漫长路才刚刚开始… 全系列文章可参考专栏: Mermaid使用指南_Once_day的博客-CSDN博客 参考文章: 关于 Mermaid | Mermaid 中文网 (nodejs.cn)Mermaid | Diagramming and charting tool…

postman传参与返回值切换为左右显示的操作

目录 第一步 点击“Settings”&#xff0c;在下拉框选择“Settings” 第二步 在默认打开的General页面&#xff0c;参照下图改动两处 第一步 点击“Settings”&#xff0c;在下拉框选择“Settings” 第二步 在默认打开的General页面&#xff0c;参照下图改动两处 附上修改后…

字符串函数strstr()详解

一、strstr()函数的作用 字符串函数 strstr() 是 C 语言的一个标准库函数&#xff0c;它的作用是在一个字符串中查找给定字符串的第一个匹配之处&#xff0c;并返回指向该字符串的指针。如果没有找到该字符串&#xff0c;则返回 NULL。1 二、strstr()函数的原型和参数 strst…