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

LeetCode——Hot 100【​电话号码的字母组合​】

题目:电话号码的字母组合

题目分析

题目要求

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合(答案可以按任意顺序返回)。数字到字母的映射与电话按键相同(如 2 对应 abc3 对应 def 等)。

示例

  • 示例 1:输入 digits = "23",输出 ["ad","ae","af","bd","be","bf","cd","ce","cf"]
  • 示例 2:输入 digits = "2",输出 ["a","b","c"]

解题思路

这道题可以通过 ** 深度优先搜索(DFS)** 来解决,属于典型的 “组合枚举” 类问题。

核心思路

对于输入字符串中的每一个数字,我们需要枚举其对应的所有字母,并将这些字母与后续数字的字母进行组合。具体来说:

  1. 首先建立数字到字母的映射表。
  2. 从第一个数字开始,递归地枚举每个数字对应的所有字母,将字母加入临时组合字符串中。
  3. 当递归到输入字符串的末尾时,将当前的临时组合字符串加入结果集。

代码详解

数据结构与全局变量

  • vector<string> ret:用于存储最终的所有字母组合结果。
  • string path:用于存储递归过程中的临时字母组合(类似 “路径”)。
  • vector<string> bor:数字到字母的映射表,bor[0] 和 bor[1] 无意义(因为题目中数字是 2-9),bor[2] = "abc" 对应数字 2 的字母,以此类推。
class Solution {
public:vector<string> ret;string path;vector<string> bor = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};

DFS 递归函数

dfs 函数负责递归枚举所有可能的字母组合,参数 pos 表示当前处理到输入字符串 digits 的第几个字符,nums 是输入的数字字符串。

    void dfs(int pos, string nums) {// 递归终止条件:当处理完所有数字时,将当前路径加入结果集if (pos == nums.size()) {ret.push_back(path);return;}// 获取当前数字(将字符转换为数字)int n = nums[pos] - '0';// 枚举当前数字对应的所有字母for (int i = 0; i < bor[n].size(); i++) {// 选择:将当前字母加入路径path.push_back(bor[n][i]);// 递归:处理下一个数字dfs(pos + 1, nums);// 回溯:撤销选择,以便枚举下一个字母path.pop_back();}}

完整代码:

class Solution {public:vector<string>ret;string path;vector<string> bor={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};void dfs(int pos,string nums){if(pos==nums.size()){ret.push_back(path);return;}int n=nums[pos]-'0';for(int i=0;i<bor[n].size();i++){path.push_back(bor[n][i]);dfs(pos+1,nums);path.pop_back();}}vector<string> letterCombinations(string digits) {if(digits.size()==0)return ret;dfs(0,digits);return ret;}
};
http://www.dtcms.com/a/486479.html

相关文章:

  • SFTP搭建小知识
  • 打印机打印空白如何解决,简单判断打印空白问题并解决
  • IDM下载失败故障排查技术文章大纲
  • 昆明模板建站代理乐亭中关村建站快车
  • 电影网站开发视频制作表格的软件
  • k8s NodePort 类型 Service 无法访问 plugin type=“flannel“ failed (add)
  • 鲲鹏服务器+银河麒麟系统安装KVM
  • 互联网大厂Java面试全解析及三轮问答专项
  • 大宗交易查询平台东莞seo公司首选3火星
  • 制作购物网站教程珠海哪个公司建设网站好
  • Github 的新动作
  • linux离线环境局域网远程ssh连接vscode
  • Electron 从低版本升级到高版本 - 开始使用@electron/remote的改造教程
  • 【源码讲解+复现】YOLOv10: Real-Time End-to-End Object Detection
  • GitHub Spec-Kit:AI 时代的规范驱动开发工具
  • 门户网站建设工作的自查报告wordpress获取链接
  • c++ STL容器.size()易造成的bug
  • 计算机组成原理01-定点数/浮点数的原/反/补码运算
  • 工控软件开发选择难?Electron、Qt、WPF 对比
  • 做网站一定需要icp么wordpress 头部菜单
  • 连云港专业网站制作互联网营销师培训方案
  • 网站 设计公司 温州wordpress新浪微博主题
  • Linux云计算基础篇(25)-DNS配置
  • 【007】墙绘产品交易平台
  • 【教学类-97-01】20251015拉布布涂色
  • 方法区与运行时常量池
  • 帮人网站开发维护违法WordPress加2Dli
  • 临清轴承网站建设企业官网wordpress主题
  • 三重变革:数字革命、地缘重构与生态危机
  • 人工智能|强化学习——基于人类反馈的强化学习(RLHF)深度解析