代码随想录算法训练营Day19 | 77.组合、216.组合总和|||、17.电话号码的字母组合

回溯问题的模板

    public static void backtracking(参数列表){if(终止条件){存放结果return;}for(选择:本层集合中元素(树中节点孩子的数量就是集合的大小)){处理节点;backtracking(路径,选择列表); // 递归回溯,撤销处理结果}}

LeetCode 77 组合

在这里插入图片描述
本题思路:组合问题,利用回溯来解决。回溯就是用来解决纯暴力解决不了的问题。此题,如果通过 for 循环, 也可以解决,但是如果 k 越来越来越大,那么就要写越来越多的 for,不切实际。
此时就可以利用回溯来解决。

  • 第一步就是分析终止条件,终止条件,就是组合大小等于 k,就可以进行结束,进行保存
  • 而 for 循环处理的就是这每一个元素
    • 保存节点
    • 然后进行递归处理
    • 然后回退到上一个节点
class Solution {public List<List<Integer>> combine(int n, int k) {List<List<Integer>> res = new ArrayList();List<Integer> path = new ArrayList();backtracking(path,res,n,k,1);return res;}public void backtracking(List<Integer> path,List<List<Integer>> res,int n, int k, int startIndex){// 先找出口终止条件if(path.size() == k){res.add(new ArrayList(path));return;}for(int i = startIndex; i <= n-(k-path.size())+1 ; i++){path.add(i);backtracking(path,res,n,k,i+1);path.removeLast();}}
}

LeetCode 216 组合总和||

在这里插入图片描述
本题思路:和上题一样,终止条件也是元素个数满足为 k的时候,不过保存结果的时候,要加个判断,和是否等于 n,只有等于才会保存起来。

class Solution {public List<List<Integer>> combinationSum3(int k, int n) {List<List<Integer>> res = new ArrayList();List<Integer> path = new ArrayList();backtracking(res,path,k,n,1);return res;}public void backtracking(List<List<Integer>> res, List<Integer> path, int k , int n , int startIndex){// 终止条件if(path.size() == k){int sum = 0;for(int i = 0; i < path.size(); i++){sum += path.get(i);}if(sum == n){res.add(new ArrayList(path));}}for(int i = startIndex; i <= 9; i++){path.add(i);backtracking(res,path,k,n,i+1);path.removeLast();}}
}

LeetCode 17 电话号码的字母组合

在这里插入图片描述
本题思路:本题和上述两题不同,不在同一个集合里面,是不同的集合,所以参数就用 index 了,不用 startIndex 进行去重。

  • 首先要将数字和对应的字符做一个映射
  • 这里终止条件就是遍历完当前数字所对应的字符串了
class Solution {String[] sMap = new String[]{" "," ","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};public List<String> letterCombinations(String digits) {List<String> res = new ArrayList();List<Character> path = new ArrayList();if(digits.equals("")){return res;}backtracking(digits,0,res,path);return res;}public void backtracking(String digits, int index, List<String> res, List<Character> path){// 终止条件if(index == digits.length()){StringBuilder s =  new StringBuilder();for(int i = 0; i < path.size(); i++){s.append(path.get(i));}res.add(s.toString());return;}Character ch = digits.charAt(index);String str = sMap[ch - '0'];for(int i = 0; i < str.length(); i++){path.add(str.charAt(i));backtracking(digits,index+1,res,path);path.removeLast();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/334604.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring之启动过程源码

文章目录 一. Spring初始化流程二. 源码分析1. 初步分析2. 核心方法refresh() 三. 事件发布机制1. 简介2. 源码分析 一. Spring初始化流程 前面的内容我们已经把Bean的生命周期的源码已经分析完了。现在我们从容器的角度去分析源码&#xff0c;这一部分首先着重分析一下Spring…

PCL 大地坐标转空间直角坐标(C++详细过程版)

目录 一、算法原理二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、算法原理 二、代码实现 头文件及读取保存函数见:PCL 空间直角坐标转大地坐标(直接求解法C…

docker打包介绍

最近在做一个开源项目&#xff0c;遇到开发者问各种问题&#xff0c;发现都是系统和软件版本的差异引起的。于是了解了一下docker的使用&#xff0c;发现docker真是个好东东&#xff0c;基本解决了各种版本差异的问题&#xff0c;真正做到了一键部署使用。 先熟悉一下docker里…

使用迭代优化递归程

王有志&#xff0c;一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群&#xff1a;共同富裕的Java人 今天我们将会分析上篇文章中递归算法存在的问题&#xff0c;并通过迭代去优化。 递归存在的问题 上一篇中&#xff0c;我们计算了序号10以内的斐波那契数。今天为了清…

解析IT运维领域ITSS和ITIL证书

&#x1f33b;IT运维领域ITSS和ITIL证书是两种广泛认可的专业认证。 &#x1f4d7;ITSS认证证书 ITSS是中国电子技术标准化研究院推出的&#xff0c;&#x1f449;包含“IT 服务工程师”和“IT 服务经理”的系列培训。有效满足GB/T 28827.1 的符合性评估要求和ITSS服务资质升级…

软件测试|MySQL ORDER BY详解:排序查询的利器

简介 在数据库中&#xff0c;我们经常需要对查询结果进行排序&#xff0c;以便更好地展示数据或满足特定的业务需求。MySQL提供了ORDER BY子句&#xff0c;使我们能够轻松地对查询结果进行排序。本文将详细介绍MySQL ORDER BY的用法和示例&#xff0c;帮助大家更好地理解和应用…

74应急响应-winlinux分析后门勒索病毒攻击

#操作系统(windows,linux)应急响应&#xff1a; 1.常见危害&#xff1a;暴力破解&#xff0c;漏洞利用&#xff0c;流量攻击&#xff0c;木马控制(Webshell,PC 木马等)&#xff0c;病毒感染(挖矿&#xff0c;蠕虫&#xff0c;勒索等)。 2.常见分析&#xff1a;计算机账户&…

有趣的前端知识(二)

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 文章目录 推荐阅读HTML元素元素属性头部元素列表元素区块元素表单元素 颜色字符实体 HTML元素 …

从零学算法17

17.给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits “23” 输出&#xff1a;[…

加速科技ST2500 数模混合信号测试设备累计装机量突破500台!

国产数字机&#xff0c;测试中国芯&#xff01;新年伊始&#xff0c;国产半导体测试设备领军企业加速科技迎来了振奋人心的一刻&#xff0c;ST2500 数模混合信号测试设备累计装机量突破500台&#xff01;加速科技凭借其持续的创新能力、完善的解决方案能力、专业热忱的本地化服…

论文阅读:Making Large Language Models A Better Foundation For Dense Retrieval

论文链接 Abstract 密集检索需要学习区分性文本嵌入来表示查询和文档之间的语义关系。考虑到大型语言模型在语义理解方面的强大能力&#xff0c;它可能受益于大型语言模型的使用。然而&#xff0c;LLM是由文本生成任务预先训练的&#xff0c;其工作模式与将文本表示为嵌入完全…

Git将本地项目上传到Gitee仓库

1.右键点击文件&#xff0c;点击Git Bash Here,进入git窗口 2.初始化本地仓库 git init3.将本地仓库与远程仓库建立连接 git remote add origin 远程仓库地址远程仓库地址在gitee仓库复制即可 4.将远程仓库的文件拉到本地仓库中 git pull origin master5.将本地文件全部上传…