当前位置: 首页 > news >正文

17 电话号码的字母组合

[17] 电话号码的字母组合

📝 题目描述

难度:🟡 中等
标签:数组哈希表回溯

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

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

示例 1:

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

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


� 解题思路

使用一个哈希表存储键盘上的每个字符,然后用一个dfs去逐个回溯遍历digits里面的每个字符


� 代码实现

classSolution{public:// 主函数:输入数字字符串 digits,返回所有可能的字母组合vector<string>letterCombinations(string digits){// 1. 建立 数字 -> 字母 的映射表(电话键盘)unordered_map<char,string>mp;mp['2']="abc";mp['3']="def";mp['4']="ghi";mp['5']="jkl";mp['6']="mno";mp['7']="pqrs";mp['8']="tuv";mp['9']="wxyz";// 2. 定义结果集,保存所有最终的字母组合vector<string>res;// 3. 定义当前正在拼接的字符串string str;// 4. 开始递归回溯(你写的bfs其实是dfs回溯)dfs(digits,mp,res,str);returnres;}// 递归回溯函数:// digits:当前还没处理完的数字串// mp:数字字母映射表// res:结果集// str:当前拼接的字符串voiddfs(string&digits,unordered_map<char,string>&mp,vector<string>&res,string&str){// 递归终止条件:// 如果 digits 为空,说明所有数字都处理完了// 当前 str 就是一个完整组合,存入结果集if(digits.empty()){res.emplace_back(str);return;}// 遍历当前第一个数字对应的所有字母// 比如 digits[0] = '2',就遍历 a,b,cfor(inti=0;i<mp[digits[0]].size();i++){// 取出当前要拼接的字母charch=mp[digits[0]][i];// ==================== 做选择 ====================// 把字母拼接到当前字符串str=str+ch;// 截取去掉第一个数字后的新数字串,继续递归string digits1=digits.substr(1);bfs(digits1,mp,res,str);// ==================== 回溯(撤销选择)====================// 删掉最后一个字母,回到上一步状态,尝试下一个字母str.pop_back();}}};

📊 复杂度分析

digits里面的数字有3或4两种长度,若两种长度的数字个数分别为n和m,由于回溯会遍历所有组合,所以总时间复杂度为:

  • 时间复杂度:O(3n∗4m)O(3^n*4^m)O(3n4m)
  • 空间复杂度:O(n)

日期:2026-5-7

http://www.jsqmd.com/news/775420/

相关文章:

  • ruflo-系统背景
  • ARM处理器分支预测技术原理与优化实践
  • 深入DengFOC/SimpleFOC速度环:PID参数整定与低通滤波避坑指南
  • 2026年论文AI率太高被导师打回?必备降AI率指南,高效搞定学术难题! - 降AI实验室
  • 百度网盘直链解析工具:免费获取高速下载链接的完整指南
  • 3分钟搞定B站视频转文字:免费开源工具bili2text完全指南
  • 通信协议封包过程 大整数拆分、浮点数缩放转换、位处理(开关机状态映射)以及特定格式的 16 进制字符串输出
  • 从.lcd到.axf:一个Keil工程中.c/.h文件导入失败的完整排错指南(STM32实战)
  • C#学习笔记正课九
  • 企业级应用如何借助 Taotoken 实现大模型 API 调用的稳定性保障
  • 终极指南:如何让Unity游戏实现无缝实时翻译
  • 2026年4月行业内优质的Altair 软件厂家推荐,压铸件模流分析,Altair 软件实力厂家有哪些 - 品牌推荐师
  • 前端性能优化:预加载和预获取最佳实践
  • 书匠策AI:论文写作界的“智能导航仪”,助你轻松驶向学术彼岸!
  • 深度解析:5个实战技巧掌握ComfyUI IPAdapter Plus多模型集成技术
  • 2026云服务器续费太贵?老鸟15年经验:不续费直接买新机,2核4G+Ubuntu宝塔面板完整实操
  • 去了一趟高原,心脏受损?心磁图让高原心脏病更早被发现!
  • 涡旋电磁波传感技术:原理、应用与微腔光频梳突破
  • 揭秘Java程序能够运行的核心逻辑之Klass模型
  • MySQL触发器失效如何检查日志_MySQL触发器调试日志查看
  • Arm Cortex-A720核心寄存器架构与虚拟化控制解析
  • 从单体智能体到多智能体协同:构建高效AI工作流的核心架构与实践
  • React OIDC身份验证实战:基于@axa-fr/react-oidc的安全集成指南
  • 飞书文档权限自动化管理:基于OpenClaw的智能代理实现
  • kill -USR1 $(cat runtime/hyperf.pid)的庖丁解牛
  • 掌握专业3D打印工作流:Blender 3MF插件全面指南
  • 基于QT(C++)实现线性表节点的存储结构综合应用设计
  • 终极网页媒体捕获指南:如何快速下载任何在线视频
  • 在Umbrel OS上部署本地Llama大模型:打造私有AI对话助手指南
  • 别再只点亮LED了!用Arduino Nano和0.96寸OLED做个迷你天气站(I2C接口保姆级教程)