LeeCode_17 电话号码的字母组合

17. 电话号码的字母组合

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

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

image-9

示例 1:

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

class Solution {
public:vector<string> letterCombinations(string digits) {// 用于存储最终结果的字符串数组vector<string> combinations;// 如果输入为空,直接返回空数组(边界情况处理)if (digits.empty()) {return combinations;}// 建立数字到字母的映射哈希表// key: 电话按键字符 (char), value: 对应的字母字符串unordered_map<char, string> phoneMap{{'2', "abc"}, {'3', "def"},  {'4', "ghi"}, {'5', "jkl"},{'6', "mno"}, {'7', "pqrs"}, {'8', "tuv"}, {'9', "wxyz"}};// combination: 临时字符串,用于存储当前递归路径上的字母组合string combination;// 调用回溯函数,从第 0 个索引开始处理backtrack(combinations, phoneMap, digits, 0, combination);return combinations;}void backtrack(vector<string>& combinations,const unordered_map<char, string>& phoneMap,const string& digits, size_t index, string& combination) {// --- 递归终止条件 ---// 当 index 等于字符串长度时,说明已经处理完了所有数字if (index == digits.length()) {// 将当前生成的完整组合存入结果集combinations.push_back(combination);return; // 结束当前分支}// 获取当前 index 位置对应的数字字符char digit = digits[index];// 从映射表中获取该数字对应的所有字母字符串const string& letters = phoneMap.at(digit);// --- 遍历当前数字的所有可能字母 ---for (const char& letter : letters) {// 【做选择】:将当前字母加入临时字符串combination.push_back(letter);// 【递归】:处理下一个数字 (index + 1)// 注意这里传入的是 index + 1,表示深入下一层backtrack(combinations, phoneMap, digits, index + 1, combination);// 【回溯/撤销选择】:// 递归返回后,需要把刚才加入的字母删掉,以便尝试当前层的下一个字母// 这就是“回溯”的核心:状态重置combination.pop_back();}}
};
class Solution {
public:// temp: 用于临时存储当前正在构建的字母组合(路径)string temp;// res: 用于存储最终所有符合条件的字母组合结果vector<string> res;// board: 电话号码按键映射表,下标 0-9 分别对应按键上的字母// 比如 board[2] = "abc",代表按键 '2' 对应字母 a, b, cvector<string> board = {"",    "",    "abc",  "def", "ghi","jkl", "mno", "pqrs", "tuv", "wxyz"};void DFS(int pos, string digits) {// 递归终止条件:当 pos 等于字符串长度时// 说明已经处理完了所有的数字,temp 中存储了一个完整的组合if (pos == digits.size()) {res.push_back(temp); // 将当前完整的组合存入结果集return;              // 结束当前递归分支,返回}// 获取当前位置对应的数字字符,并将其转换为整型索引// 例如:digits 是 "23",pos=0 时,digitVal='2',num=2int num = digits[pos] - '0';// 遍历当前数字对应的所有字母// 例如:按键 '2' 对应 "abc",循环就是 a -> b -> cfor (int i = 0; i < board[num].size(); i++) {// --- 处理节点 ---// 将当前字母加入到临时组合 temp 的末尾temp.push_back(board[num][i]);// --- 递归调用 (进入下一层) ---// 处理下一个数字的位置 (pos + 1)DFS(pos + 1, digits);// --- 回溯操作 (撤销处理) ---// 关键步骤:递归返回后,把刚才加入的字母删除// 这样才能在循环的下一次迭代中,尝试同一个按键的下一个字母// 比如试完 'a' 后,删掉 'a',才能去试 'b'temp.pop_back();}}// 主函数vector<string> letterCombinations(string digits) {// 特判:如果输入为空字符串,直接返回空结果if (digits.size() == 0) {return res;}// 从下标 0 开始进行深度优先搜索DFS(0, digits);// 返回最终生成的所有组合return res;}
};

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

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

相关文章

Selenium 从环境搭建到 Web 自动化实战

Selenium 是目前最流行的 Web 自动化测试工具,支持 Chrome、Firefox 等主流浏览器,能模拟人工操作(点击、输入、跳转)实现网页自动化,广泛应用于接口测试、数据爬取、自动化部署等场景。本文从零基础入门,手把手…

通信原理篇---PAM与PCM

解释 PAM&#xff08;脉冲幅度调制&#xff09; 和 PCM&#xff08;脉冲编码调制&#xff09; 的区别。1. 基本概念PAM&#xff1a;模拟调制方式&#xff0c;用脉冲序列的幅度来模拟连续信号的瞬时值&#xff0c;仍然是模拟信号。PCM&#xff1a;数字调制方式&#xff0c;先对模…

GESP认证C++编程真题解析 | 202309 四级

​欢迎大家订阅我的专栏:算法题解:C++与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的…

P1339 Heat Wave G

点击查看代码 #include<bits/stdc++.h> using namespace std; typedef pair<int,int> PII; const int N=3000; const int M=7000*2; int n,m,s,t; struct Edge{int to;int w;int ne; }edge[M]; int h[N]; …

P2910 Clear And Present Danger S

点击查看代码 #include<bits/stdc++.h> using namespace std;const int N=110; const int M=10010; int n,m; int p[N]; int dist[N][N]; long long ans;int main() {ios::sync_with_stdio(0),cin.tie(0);cin>…

职场晋升需要 AI 证书,选偏理论还是偏实操的更有用?

在职场晋升场景中&#xff0c;AI证书的价值需结合实用性判断。多数情况下&#xff0c;偏实操属性的证书更能适配企业“以结果为导向”的评估逻辑&#xff0c;其承载的技能可直接转化为工作效率与业务成果&#xff1b;理论类证书仅适合特定场景作为补充&#xff0c;难以成为晋升…

TCP 协议深度解析与实践:从零基础到精通

📚 学习路径:本文适合不同层次的读者🟢 小白级:了解网络基础、TCP 基本概念 🟡 初级:掌握 TCP 连接过程、Python Socket 编程 🟠 中级:理解 TCP 可靠性机制、实战应用 🔴 精通级:深入 TCP 内核机制、性…

小程序毕设选题推荐:基于springboot+微信小程序的校园竞赛管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

> STM32-200-多功能门禁人脸识别指纹识别RFID刷卡密码(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

STM32-200-多功能门禁人脸识别指纹识别RFID刷卡密码(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码产品功能描述&#xff1a; 本系统由STM32F103C8T6单片机核心板、1.44寸TFT彩屏、&#xff08;无线蓝牙/无线WIFI/无线视频监控…

数据质量与主数据管理:确保企业核心数据准确

数据质量与主数据管理&#xff1a;确保企业核心数据准确 1. 引入与连接 1.1 引人入胜的开场 想象一下&#xff0c;一家大型零售企业计划推出一系列针对特定客户群体的促销活动。营销团队精心策划了方案&#xff0c;投入了大量资源进行宣传推广。然而&#xff0c;活动结束后却发…

51-C40-温湿度检测+上下限+加热+空调降温+加湿+除湿+手动+自动+OLED屏+声光报警+按键+(无线方式选择)(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

51-C40-温湿度检测上下限加热空调降温加湿除湿手动自动OLED屏声光报警按键(无线方式选择)51-C040B蓝牙无线-APP版: 51-C040W-WIFI无线-APP版: 51-C040CAN-视频监控WIFI无线-APP版: 产品功能描述&#xff1a; 本系统由51单片机最小系统电路、OLED屏、&#xff08;无线蓝牙/无线W…

数论2:gcd、lcm与exgcd

数论2:gcd、lcm与exgcdgcd:Greatest Common Divisor,最大公约数,即对于不全为0的整数p、q,存在一最大的整数r,使得r|p、r|q且对于任意整数s,s|p且s|q,有r>=s。 记作gcd(p,q),特别的,gcd(a,0) = |a| (a!=0…

假期schedule

写在前面 假期雅思是最重要的 计划安排 5.40-5.50 起床 6.00 - 7.00 口语一节词汇课 7.30 - 9.30 第一节回放 10.00 开始第二节回放看一点可能去吃饭 尽量不要午睡 下午最好1.30 可以开始胡小溪或邹为涛 一周要保证六天&#xff0c;六个下午在做研究 晚上晚饭之后看完一个雅思回…

计算机小程序毕设实战-基于SpringBoot+Vue的高校学科竞赛管理系统微信小程序基于springboot+微信小程序的院竞赛管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

day144—递归—平衡二叉树(LeetCode-110)

题目描述给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a;输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a;输入&#xff1a;root [1,2,2,3,3,null,null,4,4] 输出&#xff1a;false示例 3&#xff1a;输入&…

2026年市场可靠的活性炭箱优质厂家哪家靠谱,滤筒除尘器/旋风除尘器/活性炭箱/催化燃烧,活性炭箱生产商口碑排行 - 品牌推荐师

评测背景 随着环保政策持续收紧及工业废气治理需求激增,活性炭箱作为VOCs(挥发性有机物)治理的核心设备,其性能稳定性、技术适配性及服务能力成为用户选型的关键指标。为客观评估市场主流供应商的综合实力,本评测…

STM32单片机分享:智能鱼缸系统

目录 一、项目成品图片 二、项目功能简介 1.主要器件组成 2.功能详解介绍 三、项目原理图设计 四、项目PCB硬件设计 项目PCB图 五、项目程序设计 六、项目实验效果 ​编辑 七、项目包含内容 一、项目成品图片 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…

2026年国内可靠的活性炭箱制造厂家推荐排行榜,RTO/旋风除尘器/沸石转轮一体机/除尘器,活性炭箱公司推荐榜 - 品牌推荐师

在工业废气治理领域,活性炭箱作为VOCs(挥发性有机物)吸附净化环节的核心设备,直接影响企业排放达标率与环保合规成本。其吸附效率、结构稳定性及运维便捷性,已成为衡量设备性能的关键指标。本文聚焦河北清大环保机…

交通仿真软件:VISSIM_(22).交通仿真在城市规划中的应用

交通仿真在城市规划中的应用 1. 交通仿真概述 交通仿真是一种通过计算机模型来模拟实际交通系统运行情况的技术。它可以帮助城市规划师、交通工程师和政策制定者在虚拟环境中评估和优化交通系统的性能。交通仿真软件通过创建详细的交通网络模型&#xff0c;模拟车辆、行人和公共…

day145—递归—二叉树的右视图(LeetCode-199)

题目描述给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。示例 1&#xff1a;输入&#xff1a;root [1,2,3,null,5,null,4]输出&#xff1a;[1,3,4]解释&#xff1a;示例 2&#xf…