尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【回溯-1】17.电话号码的字母组合
题目描述给定一个仅包含数字2-9的字符串返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下与电话按键相同。注意 1 不对应任何字母。示例 1输入digits 23输出[ad,ae,af,bd,be,bf,cd,ce,cf]示例 2输入digits 2输出[a,b,c]解题思路方法一回溯DFS核心思路把问题看成树形结构每一层对应一个数字每个节点对应该数字的一个字母从根到叶子的路径就是一个组合具体过程示例digits 23 / | \ a b c ← 数字2的字母 /|\/|\/|\ d e f d e f d e f ← 数字3的字母 所有路径: a→d, a→e, a→f b→d, b→e, b→f c→d, c→e, c→f回溯三步选择当前数字选一个字母递归处理下一个数字撤销回溯时删除当前字母代码实现class Solution { public: vectorstring letterCombinations(string digits) { if (digits.empty()) return {}; // 数字到字母的映射 vectorstring phone { , , abc, def, ghi, jkl, mno, pqrs, tuv, wxyz }; vectorstring result; string path; backtrack(digits, 0, phone, path, result); return result; } private: void backtrack(string digits, int index, vectorstring phone, string path, vectorstring result) { // 终止条件处理完所有数字 if (index digits.size()) { result.push_back(path); return; } // 当前数字对应的字母 string letters phone[digits[index] - 0]; // 遍历每个字母 for (char c : letters) { path.push_back(c); // 选择 backtrack(digits, index 1, phone, path, result); // 递归 path.pop_back(); // 撤销 } } };复杂度分析设n是数字个数每个数字最多对应 4 个字母。维度复杂度说明时间复杂度O(4^n × n)最多 4^n 个组合每个组合长度 n空间复杂度O(n)递归栈深度 path 长度更精确时间复杂度 O(所有组合的总字符数) O(4^n × n)。关键细节1. 为什么用path而不是每次新建字符串用path作为全局路径通过push_back和pop_back实现选择与撤销避免频繁创建字符串。2. 为什么digits.empty()返回{}而不是{}题目要求空字符串返回空数组不是包含空字符串的数组。3. 回溯的模板void backtrack(参数) { if (终止条件) { 收集结果; return; } for (选择 : 当前可选项) { 做选择; backtrack(下一层); 撤销选择; } }方法二队列BFS迭代代码实现class Solution { public: vectorstring letterCombinations(string digits) { if (digits.empty()) return {}; vectorstring phone { , , abc, def, ghi, jkl, mno, pqrs, tuv, wxyz }; vectorstring result {}; for (char d : digits) { vectorstring next; string letters phone[d - 0]; for (string s : result) { for (char c : letters) { next.push_back(s c); } } result move(next); } return result; } };复杂度时间 O(4^n × n)空间 O(4^n × n)缺点需要存储所有中间结果空间比回溯大。两种方法对比方法时间复杂度空间复杂度推荐度回溯DFSO(4^n × n)O(n)⭐⭐⭐⭐⭐队列BFSO(4^n × n)O(4^n × n)⭐⭐⭐总结要点说明核心思想回溯每个数字选一个字母递归下一层关键操作path.push_back(c)→ 递归 →path.pop_back()时间复杂度O(4^n × n)空间复杂度O(n)
RELATED

相关推荐

在现代 Web 自动化测试中,页面元素的加载往往具有异步性和不确定性

在现代 Web 自动化测试中,页面元素的加载往往具有异步性和不确定性

在现代 Web 自动化测试中,页面元素的加载往往具有异步性和不确定性。传统的 time.sleep() 强制等待不仅效率低下,还会导致测试用例执行时间不可控。Selenium 提供的显式等待(Explicit Wait)机制,通过 WebDriverWait 配…

📅 2026/10/3 8:46:49
绿色矿山国标施行第2天:边缘AI矿山自查达标方案

绿色矿山国标施行第2天:边缘AI矿山自查达标方案

《绿色矿山建设规范》国标(GB/T 48132)施行第2天,矿山自查进入实操阶段。重点区域视频覆盖率、画面清晰度、数据真实可追溯,都是硬指标。自查清单怎么拆?主井口、副井口、煤场出入口必须全覆盖;爆破作业面、…

📅 2026/10/3 8:46:49
上网第十四课:第二周复盘:宽带与组网 QA

上网第十四课:第二周复盘:宽带与组网 QA

上网第十四课:第二周复盘:宽带与组网 Q&A写到这儿,“家庭网络实战篇"就收官了。两周 14 篇,从宽带怎么进家门,一路讲到电视盒子,能坚持追下来的读者,现在看自家弱电箱的眼神都不一样了…

📅 2026/10/3 8:41:49
MORE NEWS

更多资讯

📰

MySQL IN查询大数据量优化:5种可落地方案与排障指南

MySQL的IN查询一遇到大数据量就容易让人头大,这个困境我太熟悉了。业务方丢过来一个任务:这有一份名单,几千个ID,帮我查一下这些ID对应的订单都是什么状态。你不能跟业务说"你少给点",你也不能假装没看见慢S…

📰

MySQL日志体系与排障实战:从错误日志到binlog的深度解析

我最早被MySQL日志折腾到凌晨三点,是因为一次线上磁盘告警。那天深夜,错误日志、binlog、慢查询日志全在疯狂写入,数据目录直接把根分区撑爆,数据库瞬间进入只读状态。那会儿我才意识到,平时不起眼的日志文件&#xff…

📰

Docker 启动 MySQL 实战:从环境准备到备份恢复踩坑指南

最近被不少朋友问到“用docker启动mysql步骤”到底怎么走,其实我在本地环境和生产环境里用 Docker 跑 MySQL 已经三年多了,踩过的坑确实不少。很多人的困惑点其实不是 Docker 本身,而是端口、数据卷、权限、SSL 这些概念和数据习惯之间对不上…

📰

Habitat-baselines v0.1.7 环境搭建与 PointNav 训练避坑指南

最近把 Habitat-baselines v0.1.7 从头到尾完整跑通了一遍,整个过程可以说是“版本锁死、依赖难装、坑点密集”,网上能找到的教程要么停留在更早的版本,要么直接跳到新版 API 完全对不上。如果你也是因为复现论文、跟课程项目或者导师指定版本…

📰

从零设计编程语言:词法分析、语法分析与解释器实现指南

设计一门编程语言,这个话题乍一听像是只在论文和编译器教科书里才会出现的事,但说实话,它离我们并不远。你每天写的SQL、正则表达式、甚至配置文件里的DSL,本质上都是“门小型编程语言”。我自己从零折腾过解释器,也维…

📰

基于Python的二维码识别系统源码数据库:从图像预处理到批量入库的完整实现

简介:这份资源是面向高校计算机相关专业学生与Python Web开发初学者的毕业设计级项目源码包,主题为基于Python与Django框架的二维码识别系统,可用于课程设计参考、全栈开发练手或毕设选题落地。压缩包共732个文件,约16.84MB&#…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬