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

代码随想录训练营Day 27|理论基础、力扣 77. 组合

1.理论基础

题目链接/文章讲解:代码随想录

视频讲解:带你学透回溯算法(理论篇)| 回溯法精讲!_哔哩哔哩_bilibili

来自代码随想录的网站:

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

所以回溯法,都可以转换成一个n叉树的树形结构,集合的大小就是子树的宽度 ,递归的深度就是树的深度。

2.组合

题目链接/文章讲解: 代码随想录

视频讲解:带你学透回溯算法-组合问题(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili

剪枝操作:带你学透回溯算法-组合问题的剪枝操作(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili

代码:(未剪枝) 

class Solution {
public:vector<vector<int>> result;vector<int> path;void backtracking(int n,int k,int startIndex){// 递归返回条件if(path.size() == k){result.push_back(path);return;}// 遍历n叉树里的结点for(int i = startIndex;i <= n;i++){path.push_back(i);backtracking(n,k,i + 1);path.pop_back();}}vector<vector<int>> combine(int n, int k) {backtracking(n,k,1);return result;}
};

代码:(剪枝版)

class Solution {
public:vector<vector<int>> result;vector<int> path;void backtracking(int n,int k,int startIndex){// 递归返回条件if(path.size() == k){result.push_back(path);return;}// 遍历n叉树里的结点for(int i = startIndex;i <= n - (k - path.size() - 1);i++){path.push_back(i);backtracking(n,k,i + 1);path.pop_back();}}vector<vector<int>> combine(int n, int k) {backtracking(n,k,1);return result;}
};

思路:剪枝的情况就是,我们所能选择的数值的数目已经小于提上要求的组合大小,这种情况可以剪掉。

以前for循环里,i <=n ,现在,我们要求出剩余数字的数目不少于n的开始下标,即 n - (k - path.size() - 1)。这里用总数目减去已经用过的数字个数,即 k - path.size() - 1。减1,是因为我们开始时的下标为1,已经默认用了一个元素了。

其实这种套模板的题,还是很省脑的(什么?

http://www.lryc.cn/news/348249.html

相关文章:

  • Spring框架深度解析:打造你的Java应用梦工厂
  • Python 正则表达式(一)
  • Cocos Creator 3.8.x报错:5302
  • 网页如何集成各社区征文活动
  • 【知识碎片】2024_05_13
  • Day53代码随想录动态规划part13:300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
  • 自己动手为wordpress注册一个Carousel轮播区块
  • 基于Springboot的实习生管理系统(有报告)。Javaee项目,springboot项目。
  • 良心实用的电脑桌面便利贴,好用的便利贴便签小工具
  • Eayswoole 报错 crontab info is abnormal
  • 移动 App 入侵与逆向破解技术-iOS 篇
  • 2024服贸会,参展企业媒体宣传报道攻略
  • CI/CD笔记.Gitlab系列.新用户管理
  • 前端 JS 经典:JS 基础类型和 typeof
  • Java入门基础学习笔记11——关键字和标识符
  • 设计模式-解释器模式(Interpreter)
  • 机器视觉任务中语义分割方法的进化历史
  • Java并发编程: Synchronized锁升级
  • Atcoder C - Routing
  • 升级! 测试萌新Python学习之连通数据库Pymsql增删改及封装(四)
  • 【大数据】containered学习笔记
  • 「TypeScript」TypeScript入门练手题
  • k8s 使用Docker和Containerd对比分析
  • MySQL 通过 systemd 启动时 hang 住了……
  • pat乙1033-旧键盘打字
  • Ubuntu安装VScode
  • c# - - - winform程序四个角添加圆角效果
  • Springboot 集成 Consul 实现服务注册中心-05
  • 【软考高项】四十六、项目管理科学计算之运筹学
  • 使用 Python 和 OpenCV 进行实时目标检测的详解