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

Day130 | 灵神 | 回溯算法 | 子集型 电话号码的字母组合

Day130 | 灵神 | 回溯算法 | 子集型 电话号码的字母组合

17.电话号码的字母组合

17. 电话号码的字母组合 - 力扣(LeetCode)

思路:

image-20250605202058174

笔者用index代替i,这里的index其实就是digits数组的下标

按照灵神的回溯三问,那就是

1.当前的操作:找到本层要给path[index]里面填入哪个字母,很明显的是每层就是一个数字的那几个字母,所以就是选定一个数字然后从它的字母中选一个

2.子问题:构造字符串>=index的部分,其实也就是说明经过了index层选择之后,我们已经确定了i位字母

3.下一个子问题:构造字符串>=index+1的部分,就是说明我们下一层的递归参数是index+1,因为我们已经在本层的字母中选择了一个,所以要继续往下走了,表现在数组上就是继续往下遍历digits

注意的细节:

映射的建立,下标要对上数字,也就是让映射的数组从下标2开始而不是0,这样会方便很多

完整代码:

class Solution {
public:vector<string> res;vector<string> s{"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};void backtracking(string digits,string path,int index){if(index==digits.size()){res.push_back(path);return ;}int n=(int)(digits[index]-'0');for(int i=0;i<s[n].size();i++){path.push_back(s[n][i]);backtracking(digits,path,index+1);path.pop_back();}}vector<string> letterCombinations(string digits) {if(digits.size()==0)return res;string path;backtracking(digits,path,0);return res;}
};

灵神代码:

灵神没有"恢复现场"这一步,是因为灵神把path初始化为全0的字符串,并且在递归中直接覆盖了对应的值,而恰巧字符串返回时的长度全都是digits数组的长度,所以把path放入结果集的时候肯定path数组都会被覆盖一遍

class Solution {const string MAPPING[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};public:vector<string> letterCombinations(string digits) {int n = digits.length();if (n == 0) {return {};}vector<string> ans;string path(n, 0); // 注意 path 长度一开始就是 n,不是空串auto dfs = [&](this auto&& dfs, int i) {if (i == n) {ans.emplace_back(path);return;}for (char c : MAPPING[digits[i] - '0']) {path[i] = c; // 直接覆盖dfs(i + 1);}};dfs(0);return ans;}
};
http://www.xdnf.cn/news/12475.html

相关文章:

  • 【DAY40】训练和测试的规范写法
  • OpenWRT prplOS-- ubus命令配置参数
  • sanitizer工具
  • 基于Pandas数据分析的设备巡检计划生成算法设计及实现
  • 设置Linux时区环境变量TZ
  • Java常用工具类方法详解及使用案例
  • 【大模型:知识库管理】--开源工具Ragflow介绍+本地搭建
  • 美化显示LLDB调试的数据结构
  • c#基础010(程序结构)
  • Spring Boot论文翻译防丢失 From船长cap
  • 搜广推特征数据变更灰度为什么实现很困难
  • float、double 这类 浮点数 相比,DECIMAL 是另一种完全不同的数值类型
  • 【地图 - 问题】公司etm地图:聚合功能重复添加,导致图标重复添加,导致部分重复添加的图标无法清除
  • 计算机组成原理(计算篇)
  • AIGC赋能前端开发
  • 多进程与多线程:核心差异与实战选择
  • AIGC-SD3、控制
  • 在亚马逊选品时,可依托数据驱动的关键词分析体系
  • vue2.0高频面试题汇总--持续更新
  • 基于STM32的DS18B20温度远程监测LCD1602显示
  • Vue3.5 企业级管理系统实战(二十三):权限指令
  • 【快速预览经典深度学习模型:CNN、RNN、LSTM、Transformer、ViT全解析!】
  • 根据指定日期和cron表达式生成下一周期的执行时间
  • C++类二
  • 吞咽与营养并重:进行性核上性麻痹患者的饮食管理方案
  • 龙虎榜——20250605
  • ubuntu安装NVIDIA驱动没有网络
  • 【GESP真题解析】第 12 集 GESP 三级 2024 年 6 月编程题 1:移位
  • Spring Cloud 2025 正式发布,你的灾难要来了
  • 系统思考持续训练