【回溯算法2】

ops/2025/2/23 2:11:22/

力扣17.电话号码的字母组合

链接: link

思路

这道题容易想到用嵌套的for循环实现,但是如果输入的数字变多,嵌套的for循环也会变长,所以暴力破解的方法不合适。
可以定义一个map将数字和字母对应,这样就可以获得数字字母的映射了,递归中index参数理解成遍历过的第几个数字,也可以想成二叉树的深度,当index值等于digits长度时表示已经递归到叶子节点,要结束递归了。
关于把回溯问题想成二叉树的思路,可以参照之前写的回溯1的思路

javascript">class Solution {List<String> res = new ArrayList<>();// 保存最后结果public List<String> letterCombinations(String digits) {if(digits == null || digits.length() == 0){return res;}//初始对应所有的数字,为了直接对应2-9,新增了两个无效的字符串""String[] numString = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};backTrace(digits,numString,0);return res;}StringBuilder  sb = new StringBuilder();// 字符串拼接void backTrace(String digits, String[] numString,int index){if(index == digits.length()){res.add(sb.toString());return;}//当前 数字对应的字符串String str = numString[digits.charAt(index) - '0'];for(int i = 0;i<str.length();i++){sb.append(str.charAt(i));backTrace(digits,numString,index+1);sb.deleteCharAt(sb.length() - 1);}}
}

思路

这道题和回溯1出现的题有区别,但是思路相似,这道题可以出现重复的元素。所以递归下一层start参数不用+1
39.组合总和
链接: link

javascript">class Solution {List<List<Integer>> res = new ArrayList();List<Integer> path = new ArrayList();public List<List<Integer>> combinationSum(int[] candidates, int target) {backTrace(candidates,target,0,0);return res;}void backTrace(int[] candidates,int target,int sum, int start){if(sum == target){res.add(new ArrayList(path));return;}for(int i = start;i < candidates.length;i++){if (sum > target) {continue;}sum += candidates[i];path.add(candidates[i]);backTrace(candidates,target,sum,i);sum -= candidates[i];path.remove(path.size() - 1);}}
}

http://www.ppmy.cn/ops/160658.html

相关文章

在wsl环境中配置和开发verilog(一种比较新颖的verilog开发指南)

WSL是windows中自带的linux子系统&#xff0c;笔者在若干月前首次接触其便爱不释手&#xff0c;verilog作为一种硬件解释语言&#xff0c;可否像c语言那样被游刃有余的编译和运行呢&#xff0c;笔者这次大胆的尝试在WSL环境VSCODEIverilog开发verilog。 首先默认按照了WSL和VS…

七、敏捷开发工具:持续集成与部署工具

一、敏捷开发工具——持续集成与部署工具 持续集成(CI)与持续部署(CD)是现代敏捷开发中不可或缺的关键实践。通过自动化构建、测试和部署流程,团队可以快速反馈、提高代码质量,并加速产品交付。为此,持续集成与部署工具应运而生,它们能够帮助开发团队在整个开发周期内…

Unity Mixamo模型更好的适配角色模型

有时候从Mixamo下载了模型应用到Unity的角色模型上时,会发现部分动作表现跟在Mixamo上看到的有不少差别, 这时候就需要进行适配操作. 最关键的一步是要使用被适配的模型到Mixamo上作为底模获取动作;下载时选择FBX for Unity可以裁剪不需要的资源, 帧数60, 点击下载选择需要适配…

微服务线上发布稳定性解决方案

好的&#xff0c;我理解了你的需求。以下是根据你的反馈细化后的解决方案&#xff0c;重点加强了灰度发布、蓝绿发布中的数据库兼容性设计&#xff0c;发布后如何快速发现业务逻辑异常以及应急预案和最佳实践部分的详细描述。 线上发布稳定性解决方案 1. 无损下线方案 1.1 关闭…

国产超强开源大语言模型 DeepSeek-R1-70B 一键部署教程

DeepSeek-R1-Distill-Llama-70B 是深度求索 (DeepSeek) 公司于 2025 年推出的开源大语言模型&#xff0c;参数规模高达 700 亿。它是基于 Llama3.3-70B-Instruct 进行训练的&#xff0c;采用强化学习和蒸馏技术提升推理表现&#xff0c;不仅继承了 Llama 系列模型的优势&#x…

Sui 如何支持各种类型的 Web3 游戏

Web3 游戏不仅仅是拥有数字资产 — — 它是将区块链技术整合到游戏中&#xff0c;创造传统游戏无法提供的新机遇&#xff0c;包括所有权、持久性和互操作性。 在传统游戏中&#xff0c;玩家投入时间和金钱获取游戏内物品&#xff0c;但这些资产依然被锁定在中心化的生态中。而…

一周学会Flask3 Python Web开发-post请求与参数获取

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili app.route 装饰器默认只支持get请求。假如我们要让绑定的视图函数支持其他请求方式&#xff0c;我们可以在methods属性里配置…

CPU多级缓存与缓存一致性协议

CPU多级缓存与缓存一致性协议 CPU多级缓存和缓存一致性协议是计算机体系结构中优化性能与保证数据正确性的核心机制。以下从缓存层级设计、工作原理、一致性协议&#xff08;如MESI&#xff09;及其实现细节展开说明。 一、为什么需要多级缓存&#xff1f; CPU的计算速度远高…