day152—回溯—电话号码的字母组合(LeetCode-17)

题目描述

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

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

示例 1:

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

示例 2:

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

提示:

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

解决方案:

这段代码的核心功能是生成电话号码数字串对应的所有字母组合(比如输入 "23" 输出 ["ad","ae","af","bd","be","bf","cd","ce","cf"]),采用「类成员变量 + 递归回溯」的传统写法实现,替代了原 lambda 表达式的递归方式,时间复杂度O(3^m × 4^n)m是对应 3 个字母的数字个数,n是对应 4 个字母的数字个数),空间复杂度O(len)len为数字串长度,递归栈 + 路径字符串开销),是该问题的经典回溯解法。

核心逻辑(总体)

代码通过类成员变量共享递归所需的核心数据,再通过深度优先搜索(DFS)的回溯思想,逐位遍历数字对应的字母,拼接出所有可能的组合:

  1. 类成员变量设计
    • MAPPING:固定的数字→字母映射表,对应电话键盘的数字 - 字母关系;
    • ans:存储最终所有字母组合的结果数组;
    • path:临时存储当前拼接的字母路径(比如处理到第 2 位时,path 可能是 "a");
    • digits/len:存储输入的数字串和其长度,供递归函数访问;
  2. 递归辅助函数dfs
    • 参数i:表示当前处理到数字串的第i位;
    • 终止条件:i == len时,说明所有数字都处理完毕,将当前路径path加入结果数组ans
    • 核心逻辑:取出第i位数字对应的字母集,遍历每个字母并填入path[i],递归处理下一位数字(i+1),完成回溯遍历;
  3. 主函数letterCombinations
    • 边界处理:输入数字串为空时直接返回空数组;
    • 初始化成员变量:将输入的数字串、长度、路径字符串(初始化长度为数字串长度)赋值给类成员;
    • 启动递归:调用dfs(0)从第 0 位数字开始处理,最终返回结果数组ans

总结

  1. 核心思路:用回溯法遍历所有可能的字母组合,逐位确定数字对应的字母,递归到底时保存完整组合;
  2. 关键设计:将递归所需的结果、路径、输入等数据设为类成员变量,避免递归函数传递大量参数,简化逻辑;

函数源码:

#include <vector> #include <string> using namespace std; class Solution { public: // 数字到字母的映射表(类内私有常量) const string MAPPING[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; // 结果数组(类内私有成员,供辅助函数访问) vector<string> ans={}; // 临时存储当前路径的字符串 string path=""; // 输入的数字字符串 string digits=""; // 数字字符串的长度 int len=digits.length(); // 递归辅助函数 void dfs(int i) { // 递归终止条件:遍历完所有数字 if (i == len) { ans.emplace_back(path); return; } // 获取当前数字对应的字母集 string letters = MAPPING[digits[i] - '0']; // 遍历当前数字的所有可能字母 for (auto c : letters) { path[i] = c; // 记录当前位置的字母 dfs(i + 1); // 递归处理下一个数字 } } vector<string> letterCombinations(string digits) { this->len = digits.length(); // 边界条件:空字符串直接返回空数组 if (this->len == 0) { return {}; } // 初始化成员变量 this->digits = digits; this->path = string(this->len, 0); // 初始化路径字符串长度为数字长度 // 调用递归辅助函数,从第0个数字开始处理 dfs(0); return this->ans; } };

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

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

相关文章

python基于vue的电力集团企业员工职称评定系统

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 电力集团企业员工职称评定系统基于Python与Vue.js技术栈开发&#xff0c;旨在实现职称评定的数字化、标准化与高效化管理。系统…

AI 写论文哪个软件最好?实测封神!虎贲等考 AI 成毕业通关 “学术引擎”

毕业季的论文战场&#xff0c;“AI 写论文哪个软件最好” 的灵魂拷问&#xff0c;成了无数学子的热议焦点。市面上的 AI 论文工具五花八门&#xff0c;却大多难逃 “文献造假”“数据空洞”“逻辑断层” 的三大魔咒。作为深耕论文写作科普的测评博主&#xff0c;我以计算机、汉…

上海靠谱嵌入式开发怎么选,实邦电子值得考虑吗?

上海靠谱嵌入式开发怎么选&#xff0c;实邦电子值得考虑吗&#xff1f; 实邦电子&#xff1a;十六年行业沉淀的科技企业 上海实邦电子科技有限公司成立于2009年&#xff0c;至今已在行业内深耕16年。这16年的时间里&#xff0c;实邦电子不断积累经验&#xff0c;在电子科技领…

python基于vue美剧观影点评网站的设计与实现

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 设计并实现了一个基于Python和Vue的美剧观影点评网站&#xff0c;旨在为用户提供剧集评分、评论交流及个性化推荐功能。后端采…

9 款 AI 写论文哪个好?实测虎贲等考 AI:毕业论文的学术通关全能王

毕业季的论文战场上&#xff0c;“9 款 AI 写论文哪个好” 的灵魂拷问&#xff0c;总能在高校互助群里刷屏。不少同学踩坑无数&#xff1a;有的工具生成内容充斥 “文献幻觉”&#xff0c;有的查重结果与学校标准脱节&#xff0c;有的 AI 痕迹明显被系统预警。作为深耕论文写作…

魔果云课|寒假录课变现密码[特殊字符]

教培老师集合&#xff01;寒假想靠录课变现又怕麻烦&#xff1f;是不是总被这些问题卡壳&#x1f92f;手写圈题手酸到抬不起来&#xff0c;字迹模糊学员看不清重点&#xff1f;同一道题重复讲N遍&#xff0c;嗓子喊哑还总有人说没听懂&#xff1f;录课素材杂乱没法复用&#xf…

单片机毕业论文(毕设)易上手开题报告推荐

【单片机毕业设计项目分享系列】 &#x1f525; 这里是DD学长&#xff0c;单片机毕业设计及享100例系列的第一篇&#xff0c;目的是分享高质量的毕设作品给大家。 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的单片机项目缺少创新和亮点…

【上海大学主办|应用数学会议】第六届应用数学、建模与智能计算国际学术会议(CAMMIC 2026)

第六届应用数学、建模与智能计算国际学术会议&#xff08;CAMMIC 2026&#xff09; 2026 6th International Conference on Applied Mathematics, Modelling and Intelligent Computing 2026年3月27-29日|中国-上海 第六届应用数学、建模与智能计算国际学术会议&#xff08;C…

探秘无锡大厂成熟Foc电机控制代码,解锁电动车控制新高度

无锡某大厂成熟Foc电机控制 代码&#xff0c;有原理图&#xff0c;用于很多电动车含高端电动自行车厂在用。 直接可用&#xff0c;不是一般的普通代码可比的。 有上位机用于调试和显示波形&#xff0c;直观调试。 代码基于Stm32F030&#xff0c;国产很多芯片可以通用。 本产品包…

深度测评8个AI论文软件,专科生搞定毕业论文+格式规范!

深度测评8个AI论文软件&#xff0c;专科生搞定毕业论文格式规范&#xff01; AI 工具如何成为专科生论文写作的“秘密武器” 在当今学术环境中&#xff0c;AI 工具正逐渐成为学生撰写论文的重要助手。尤其是对于专科生而言&#xff0c;面对繁重的论文任务和严格的格式要求&…

BCL-XL/CRBN PROTAC试剂盒:推动肿瘤选择性蛋白降解疗法开发的标准化工具

一、PROTAC技术的发展现状与核心价值 靶向蛋白降解嵌合体技术&#xff08;PROTAC&#xff09;是一种革命性的药物开发平台&#xff0c;能够利用细胞自身的泛素-蛋白酶体系统来选择性降解致病蛋白质。与传统抑制剂相比&#xff0c;PROTAC技术通过事件驱动的催化降解模式&#x…

第4章:开源模型全景图:如何选择你的技术底座

第4章:开源模型全景图:如何选择你的技术底座 引言 开源大模型生态正在经历爆炸式增长。截至2024年6月,HuggingFace平台托管的模型数量已超过50万个,每月新增数千个模型。面对如此庞杂的选择,技术决策者往往陷入两难:是选择规模最大、性能最强的模型,还是选择更符合实际…

一个网安老炮的私活生存指南:6年赚够4倍工资,这些野路子你敢试吗?

一个网安老炮的私活生存指南&#xff1a;6年赚够4倍工资&#xff0c;这些野路子你敢试吗&#xff1f; 前言 今天是我蹲在网络安全这个坑里的第9个年头。回想起刚入行时&#xff0c;怎么也没想到&#xff0c;这个让我熬夜扒漏洞、跟防火墙较劲的领域&#xff0c;竟成了我人生的…

2026-01-12 关于研发成本的思考

# 关于研发成本的思考 背景:资源约束与战略扩张的矛盾 当前研发投入与新启动项目的数量呈强正相关,但技术类项目的营收回报周期通常滞后 2-3 年,导致投入期与收益期错配。 管理层在战略上既追求未来 3-5 年的高增长…

第5章:Prompt Engineering的工程化实践

第5章:Prompt Engineering的工程化实践 引言 当OpenAI在2022年发布ChatGPT时,提示工程(Prompt Engineering)还被视为一种临时技巧集合。两年后的今天,随着企业将大模型应用于生产环境,提示词已成为关键的系统组件——它们直接影响业务效果、系统稳定性和运营成本。本章将…

基于python的校园论坛交流系统

目录校园论坛交流系统摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;校园论坛交流系统摘要 校园论坛交流系统是基于Python开发的在线平台&#xff0c;旨在为学生、教师和教职工提供信息…

洛谷 P3748 [六省联考 2017] 摧毁“树状图”

题目链接 看来这次出题人拉了坨大的,他还真有勇气,我一看,可以分成两种情况讨论:两条链相交。因为题目要求交点最多一个,所以可以枚举交点,下面挂 \(0 \sim 4\) 条最大的链计算答案。两条链无交。这时候可以把树…

洛谷 P5071 [Ynoi Easy Round 2015] 此时此刻的光辉

题目链接 令 \(V = 10 ^ 9\),先把 \(\sqrt V\) 内的所有质数筛出来,然后对每个 \(a _ i\) 分解质因数,所有不同的质因数只有 \(\text O (\sqrt V + n)\) 个。 考虑莫队,由于一个 \(a _ i\) 只有不超过 \(10\) 个不…

第四章:网络编程

互联网协议介绍 互联网的核心是一系列协议,总称为”互联网协议”(Internet Protocol Suite),正是这一些协议规定了电脑如何连接和组网。我们理解了这些协议,就理解了互联网的原理。由于这些协议太过庞大和复杂,没有办法在这里一概而全,只能介绍一下我们日常开发中接触较…

营销型网站建设避坑要点:内容本地化和广告素材匹配怎么做

在跨境电商企业进入欧洲市场的早期阶段&#xff0c;营销型网站建设中“内容本地化”和“广告素材匹配”的问题往往决定了广告投放的ROI。结论是&#xff1a;若未建立语言、文化与投放渠道之间的匹配逻辑&#xff0c;企业在多语言广告环境下的转化效率极易下降。要评估成效&…