代码随想录二刷|回溯1

news/2025/2/7 3:29:32/

回溯

组合问题

方法

组合

题干

给定两个整数 nk,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。

思路

(1)定义全局变量数组,作为存放组合的数组和存放最终答案的数组

(2)如果组合长度为k,加入答案,返回

(3)从起始的index出发,直到n,一次放入组合,递归调用下一个index,再弹出组合里面的index

class Solution {
public:vector<vector<int>>res;vector<int>ans;void f(int n,int k,int index){if(ans.size()==k){res.push_back(ans);return;}// if(index+k>n){//     return;// }for(int i=index;i<=n;i++){ans.push_back(i);f(n,k,i+1);ans.pop_back();}}vector<vector<int>> combine(int n, int k) {f(n,k,1);return res;}
};

组合的优化

题干

给定两个整数 nk,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。

思路

优化点:遍历的终点从n改成n-(k-ans.size())+1

因为如果剩下的元素不足够填满组合,就停下来

(n = 4,k = 3, 目前已经选取的元素数为0(ans.size为0),现在的index是1,n - (k - index) + 1 即 4 - ( 3 - 1) + 1 = 3,也就是说,组合的第一个匀速可以是1或2或3)

class Solution {
public:vector<vector<int>>res;vector<int>ans;void f(int n,int k,int index){if(ans.size()==k){res.push_back(ans);return;}for(int i=index;i<=n-(k-ans.size())+1;i++){ans.push_back(i);f(n,k,i+1);ans.pop_back();}}vector<vector<int>> combine(int n, int k) {f(n,k,1);return res;}
};

组合之和

题干

找出所有相加之和为 nk 个数的组合,且满足下列条件:

  • 只使用数字1到9
  • 每个数字 最多使用一次

返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

思路

(1)结束条件:组合长度到k的时候,如果组合之和是n,那么存答案。无论组合之和是否为n,只要长度到k,都要返回

(2)遍历: 从起始值到9,依次加入组合,递归调用下一个值,将现在的元素从组合拿走

class Solution {
public:vector<vector  <int>>res;vector<int> ans;void f(int k,int n,int index){if(ans.size()==k){int s=0;for(int j=0;j<k;j++){s+=ans[j];}if(s==n)res.push_back(ans);return;}for(int i=index;i<=9;i++){ans.push_back(i);f(k,n,i+1);ans.pop_back();}}vector<vector<int>> combinationSum3(int k, int n) {f(k,n,1);return res;}
};

http://www.ppmy.cn/news/1569973.html

相关文章

二叉树03(数据结构初阶)

文章目录 一&#xff1a;实现链式结构二叉树1.1前中后序遍历1.1.1遍历规则1.1.2代码实现 1.2结点个数以及高度等1.2.1二叉树结点个数1.2.2二叉树叶子结点个数1.2.3二叉树第k层结点个数1.2.4二叉树的深度/高度1.2.5 二叉树查找值为x的结点1.2.6二叉树的销毁 1.3层序遍历1.4判断是…

【starrocks学习】之将starrocks表同步到hive

目录 方法 1&#xff1a;通过HDFS导出数据 1. 将StarRocks表数据导出到HDFS 2. 在Hive中创建外部表 3. 验证数据 方法 2&#xff1a;使用Apache Spark同步 1. 添加StarRocks和Hive的依赖 2. 使用Spark读取StarRocks数据并写入Hive 3. 验证数据 方法 3&#xff1a;通过…

20-30 五子棋游戏

20-分析五子棋的实现思路_哔哩哔哩_bilibili20-分析五子棋的实现思路是一次性学会 Canvas 动画绘图&#xff08;核心精讲50个案例&#xff09;2023最新教程的第21集视频&#xff0c;该合集共计53集&#xff0c;视频收藏或关注UP主&#xff0c;及时了解更多相关视频内容。https:…

电路研究9.2.6——合宙Air780EP中HTTP——HTTP GET 相关命令使用方法研究

这个也是一种协议类型&#xff1a; 14.16 使用方法举例 根据之前多种类似的协议的相关信息&#xff1a; HTTP/HTTPS&#xff1a;超文本传输协议&#xff08;HTTP&#xff09;用于Web数据的传输&#xff0c;而HTTPS是HTTP的安全版本&#xff0c;使用SSL/TLS进行加密。与FTP相比&…

在uniapp中修改打包路径

在uniapp中修改打包路径&#xff0c;主要涉及到对manifest.json文件的编辑。以下是详细的步骤&#xff1a; 1. 确定当前uniapp项目的打包配置位置 uniapp项目的打包配置通常位于项目的根目录下的manifest.json文件中。这个文件包含了项目的全局配置信息&#xff0c;包括应用的…

OSCP - Other Machines - sar2HTML

主要知识点 路径枚举cronjob提权 具体步骤 nmap扫描&#xff0c;只开了一个80端口 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-31 19:13 CST Nmap scan report for 172.16.33.13 Host is up (0.035s latency). Not shown: 65534 closed tcp ports (conn-refus…

吴恩达深度学习——优化神经网络

本文来自https://www.bilibili.com/video/BV1FT4y1E74V&#xff0c;仅为本人学习所用。 文章目录 优化样本大小mini-batch 优化梯度下降法动量梯度下降法指数加权平均概念偏差纠正 动量梯度下降法 RMSpropAdam优化算法 优化学习率局部最优问题&#xff08;了解&#xff09; 优…

6.PPT:魏女士-高新技术企业政策【19】

目录 NO1234​ NO567 ​ NO1234 创建“PPT.pptx”考生文件夹Word素材文档&#xff1a;选中对应颜色的文字→选中对应的样式单击右键按下匹配对应文字&#xff1a;应用所有对应颜色的文字开始→创建新的幻灯片→从大纲&#xff1a;考生文件夹&#xff1a;Word素材重置 开始→版…