【代码随想录算法训练营第二十四天|回溯算法的理论基础、77. 组合】

代码随想录算法训练营第二十四天|回溯算法的理论基础、77. 组合

  • 回溯算法的理论基础
  • 77. 组合

回溯算法的理论基础

这里我觉得《代码随想录》和y总的课都比较好了

《代码随想录》 : https://programmercarl.com/0077.%E7%BB%84%E5%90%88%E4%BC%98%E5%8C%96.html#%E5%89%AA%E6%9E%9D%E4%BC%98%E5%8C%96
y总:http://www.acwing.com

这里我觉得无论是y总还是代码随想录,提供的思路都比较好,这我觉得代码随想录提供的回溯适应的一写题目比较好:
在这里插入图片描述

77. 组合

我室一看就会,一写就废。下面看代码:

class Solution {
public:vector<vector<int>> ans;vector<int> path;vector<vector<int>> combine(int n, int k) {dfs(n,k,1);return ans;}void dfs(int n,int k,int start){if(!k) {ans.push_back(path);return;}for(int i = start;i <= n;i++){path.push_back(i);dfs(n,k - 1,i + 1);path.pop_back();}}
};

这道题目的方法适合回溯。有没有人一开始和我一样使用的是双重循环,可能开始我把问题想的简单了,双重循环在n=i,k = 1的情况下是不好写的,要么就的把k=1的这种情况列出来,还是有点麻烦的,不过有兴趣的可以试一试。
回溯的方法:
ans: 记录最终的结果
path: 记录每一个组合的结果
回溯方法就是每次先递归,递归的时候先向path中加一个数,然后再递归dfs(n,k - 1,i + 1),k - 1这个就是为了保证每个子结果中的元素的个数是k。i+1就是说每次都从i后面开始。
这里我想多说一个另外的话题,就是组合也不是没有规矩的组合,确实是随意选取两个数字组合不假,但是选取数字也是有规矩的,比如1,2,3,当1在前面时就组合{1,2}{1,3},不能到了3这里再去组合{1,3}。
然后就是对path的清空,如果不清空,则ans的每个元素中的个数就不能保证是k个了。

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

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

相关文章

手握中下牌型如何赢掼蛋?

中下牌型的特点&#xff1a;牌不是很好&#xff0c;炸弹少&#xff0c;但是牌型种类较多&#xff0c;并且有上手牌&#xff0c;适合配合对方&#xff0c;发动进攻。手握此类牌型&#xff0c;可采取协同进攻、全面防御、顺势突围三种方式来扭转双下局面。 一、协同进攻 此时应当…

【松叶漫话】程序员裁员潮:如何面对技术变革下的职业危机

一对来自中国的工程师夫妻在美身亡&#xff0c;疑因谷歌裁员致悲剧发生。在技术变革下&#xff0c;裁员对于程序员的影响到底有多大&#xff1f;一起来聊聊吧~ 方向一&#xff1a;技术变革 当前的技术变革涵盖了多个方面&#xff0c;其中一些主要趋势包括人工智能&#xff08;…

数据结构--数组和广义表

1. 数组的定义 略 2. 数组的顺序表示 由于数组定义后&#xff0c;数组的维度和每维的长度就不再改变&#xff0c;其结构是固定的&#xff0c;因此一般采用顺序存储结构。 3. 特殊矩阵的压缩矩阵 4. 广义表的定义和抽象操作 广义表一些操作可以看数据结构--广义表_空广义表的…

Unity 工厂方法模式(实例详解)

文章目录 在Unity中&#xff0c;工厂方法模式是一种创建对象的常用设计模式&#xff0c;它提供了一个接口用于创建对象&#xff0c;而具体的产品类是由子类决定的。这样可以将对象的创建过程与使用过程解耦&#xff0c;使得代码更加灵活和可扩展。 工厂模式的主要优点如下&…

二、arcgis 点shp数据处理

在工作中&#xff0c;很多时候客户会提供点坐标&#xff0c;那么要想把点坐标生成shp文件&#xff0c;有两种方法&#xff08;坐标系CGCS2000&#xff09;&#xff1a; 1.当只有个位数的点坐标时&#xff0c;可以直接在arcgisMap中添加&#xff0c;具体步骤如下&#xff1a; …

Qt 开发环境配置 vs和Qt creator

Qt 开发环境配置 vs和Qt creator 1、安装的软件 1、vs_Enterprise.exe 2、Qt creator (最好是最新的版本,低版本不支持vs2019) 下载地址&#xff1a;https://gofile-3535697530.cn1.quickconnect.cn/sharing/zMCh5ENgZ 密码&#xff1a;qt_dev 2、Qt Creator配置 1、打开…

htmx,它到底是框架还是库?

在最近的前端开发技术的探讨中&#xff0c;htmx经常成为热议的话题。一些人批评它&#xff0c;认为尽管htmx批评现代前端框架过于复杂&#xff0c;但它自己却似乎也是一个复杂的框架。这种看法值得我们深入思考。因为当你将任何第三方代码引入你的项目时&#xff0c;无论是htmx…

独立服务器有哪些优势

建立和维护一个强大的线上网站存在对于个人、企业和组织来说至关重要。而作为构建一个稳定、高效网站的基石之一&#xff0c;服务器的选择变得越来越重要。在服务器的选择中&#xff0c;独立服务器已经成为了许多人首选的方案。 独立服务器究竟有哪些优势呢&#xff1f; 1、稳…

力扣1143. 最长公共子序列(动态规划)

Problem: 1143. 最长公共子序列 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 我们先假设已经将两个字符串转换为两个char类型的数组&#xff08;t1,t2&#xff09;便于比较 1.如果t1[i] t2[j],有三种决策&#xff1a;&#xff08;i1&#xff0c;j1&#xff09;&a…

代码随想录二刷 | 回溯 |组合总和

代码随想录二刷 &#xff5c; 回溯 &#xff5c;组合总和 题目描述解题思路代码实现 题目描述 39.组合总和 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复…

503.下一个更大元素II 42.接雨水

503.下一个更大元素II 42.接雨水 503.下一个更大元素II 力扣题目链接(opens new window) 给定一个循环数组&#xff08;最后一个元素的下一个元素是数组的第一个元素&#xff09;&#xff0c;输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序&…

Linux操作系统——理解文件系统

预备知识 到目前为止&#xff0c;我们所学习到的关于文件的操作&#xff0c;全部都是基于文件被打开&#xff0c;被访问&#xff0c;访问期间比较重要的有重定向&#xff0c;缓冲区&#xff0c;一切皆文件&#xff0c;当我们访问完毕的时候需要将文件关闭&#xff0c;关闭时那…