算法刷题Day24 | 回溯算法基础理论、 77. 组合

目录

  • 0 引言
  • 1 回溯算法基础理论
    • 1.1 回溯算法模板
    • 1.2
  • 2 组合
    • 2.1 我的解题
    • 2.2 剪枝操作

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:算法专栏
  • 💥 标题:算法刷题Day23 | 回溯算法基础理论、 77. 组合
  • ❣️ 寄语:书到用时方恨少,事非经过不知难!

0 引言

没错,忙完腾讯面试,我胡汉三又回来了,哈哈,加油

1 回溯算法基础理论

  • 🎈 文档讲解
  • 🎈 视频讲解
  • 🎈 做题状态:

1.1 回溯算法模板

在递归中有三部曲:

  1. 递归函数的参数和返回值
  2. 递归函数终止的条件
  3. 单层递归的逻辑

回溯三部曲:

  1. 回溯函数返回值和参数:函数名一般为 backtracking,返回值一般为 void。再来看一下参数,回溯算法的参数不像二叉树递归你们容易一次性确定下来,所以一般先写逻辑,然后需要什么参数就填什么参数。
  2. 回溯函数的终止条件:判断是否满足终止条件,满足的话先将结果保存,然后再 return。
  3. 单层回溯的逻辑:选择、递归、撤回选择

代码模板如下:

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

1.2

2 组合

  • 🎈 文档讲解
  • 🎈 视频讲解
  • 🎈 做题状态:

组合和排列的区别,组合的话 {1,2} 和 {2,1} 是同样的结果,但是在排列中就是两种结果。

2.1 我的解题

有了之前递归的基础,再来写回溯就觉得还是可以理解的。回溯算法中的单层回溯往往涉及一个for循环,因为我们是将回溯问题转换成了一个n叉树来解决,所以要遍历当前层数的所有分支。而在之前二叉树的题目中,因为树的分支就两个,所以在单层递归逻辑中直接就是分别调用左右子树进行两次递归就行。

class Solution {
public:// 1. 参数和返回值void backTracing(int& n, int& k, int startIndex, vector<int>& path, vector<vector<int>>& res){// 2. 递归终止条件if (path.size() == k){res.push_back(path);return;}// 3. 单层回溯逻辑for (int i = startIndex; i <= n; i++){path.push_back(i);backTracing(n, k, i+1, path, res);path.pop_back();}}vector<vector<int>> combine(int n, int k) {vector<vector<int>> res;vector<int> path;backTracing(n, k, 1, path, res);return res;}
};

2.2 剪枝操作

剪枝的原理:我们要搜索一个大小为n的集合结果,但是此时剩余需要判断的元素已经不足n了。就拿刚才的代码距离,当n为4,k也为4的时候。假如此时的 startIndex为 2,当前 path 的元素个数为 1 。就代表这个分支怎么组合都不可以会出现path元素个数等于4的情况。此时这个分支就可以去除了。

在这里插入图片描述

代码如下:只修改了单层回溯逻辑的代码,增加了一个剪枝的操作。

        // 3. 单层回溯逻辑// 先进行剪枝int maxCount = n - startIndex + 1 + path.size();if (maxCount < k){return;}for (int i = startIndex; i <= n; i++){path.push_back(i);backTracing(n, k, i+1, path, res);path.pop_back();}

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

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

相关文章

2024年第七届信息管理与管理科学国际会议(IMMS 2024)即将召开!

2024年第七届信息管理与管理科学国际会议&#xff08;IMMS 2024&#xff09;将于2024年8月23-25日在中国北京举行。数字化时代&#xff0c;我们面临着诸多挑战&#xff0c;如信息安全问题、数据治理难题、管理创新需求等。IMMS 2024的召开&#xff0c;旨在让全球信息管理与管理…

Centos7 安装GitLab

安装环境: 虚拟机:Centos7 最小安装 4核8G 下载GitLab 本次实验下载的是 gitlab-ce-14.1.0-ce.0.el7.x86_64.rpm 官网截图 清华源截图 安装包下载地址(官网;下载CE版本,EE是收费版本):https://packages.gitlab.com/gitlab/gitlab-ce国内镜像源下载地址(清华源):htt…

(源码+部署+讲解)基于Spring Boot和Vue的大学志愿者服务平台的设计与实现

摘要&#xff1a; 随着互联网技术的快速发展&#xff0c;大学校园内的志愿者活动日益增多&#xff0c;传统的志愿者管理方式已难以满足现代化、信息化的需求。因此&#xff0c;设计并实现一个基于Spring Boot和Vue的大学志愿者服务平台显得尤为重要。本文详细阐述了该平台的设计…

前端三剑客 —— CSS (第五节)

目录 内容回顾&#xff1a; 特殊样式 特殊样式 CSS变量 常见函数 倒影效果 页面布局 Table 布局&#xff08;了解即可&#xff09; DIVCSS布局 弹性布局 1&#xff09;不使用弹性布局&#xff0c;而是使用DIVCSS 2&#xff09;使用弹性布局实现导航菜单 内容回顾…

Windows深度学习环境----Cuda version 10.2 pytorch3d version 0.3.0

Requirements Python version 3.8.5Pytorch version: pytorch1.6.0 torchvision0.8.2 torchaudio0.7.0 cudatoolkit10.2.89pytorch3d version 0.3.0Cuda version 10.2 感觉readme文件里的不适配&#xff0c;跟pytorch官网不同 以前的 PyTorch 版本 |PyTorch的 # CUDA 10.2 c…

睿考网:小白怎么准备二级建造师考试?

小白想要准备二级建造师考试&#xff0c;可以遵循以下策略&#xff1a; 1.定位明确&#xff0c;设定目标&#xff0c;确保三门科目达到及格标准&#xff0c;避免学科偏重。 2.基础知识扎实&#xff0c;考试内容主要来自教材&#xff0c;因此&#xff0c;理解和记忆所学的基础…

Redis: 持久化

文章目录 一、RDB持久化1、概念2、生成、载入RDB文件3、执行时机&#xff08;1&#xff09; 执行save命令&#xff08;2&#xff09;执行bgsave命令&#xff08;3&#xff09;Redis停机时&#xff08;4&#xff09;触发RDB条件 4、bgsave原理5、小结 二、AOF持久化1、概念2、AO…

Linux初学(十四)LampLnmp

一、简介 LAMP和LNMP是两种常见的web服务器组合。具体如下&#xff1a; LAMP&#xff1a;LAMP代表的是Linux&#xff08;操作系统&#xff09; Apache&#xff08;HTTP服务器&#xff09; MySQL&#xff08;数据库&#xff09; PHP&#xff08;编程语言&#xff09;。这个组合被…

微信小程序 电影院售票选座票务系统5w7l6

uni-app框架&#xff1a;使用Vue.js开发跨平台应用的前端框架&#xff0c;编写一套代码&#xff0c;可编译到Android、小程序等平台。 框架支持:springboot/Ssm/thinkphp/django/flask/express均支持 前端开发:vue.js 可选语言&#xff1a;pythonjavanode.jsphp均支持 运行软件…

OpenCV单通道图像按像素成倍比例放大(无高斯平滑处理)

OpenCV中的resize函数可以对图像做任意比例的放大(/缩小)处理&#xff0c;该处理过程会对图像做高斯模糊化以保证图像在进行放大&#xff08;/缩小&#xff09;后尽可能保留源图像所展现的具体内容&#xff08;消除固定频率插值/采样带来的香农采样信息损失&#xff09;&#x…

TCP客户端及服务器端开发实践

一、TCP客户端及服务器端开发实践 1、TCP网络应用程序开发分类 ① TCP客户端应用程序开发 ② TCP服务器端应用程序开发 客户端程序是指运行在用户设备上的程序&#xff0c;服务端程序是指运行在服务器设备上的程序&#xff0c;专门为客户端提供数据服务。那如何记忆呢&…

Centos7安装jdk

下载上传并解压 下载 jdk-8u201-linux-x64.tar.gz 链接&#xff1a;https://pan.baidu.com/s/13WWt6ArVYXt8QmdU3Z3zOg?pwdwxyu 提取码&#xff1a;wxyu 上传 上传到服务器/opt目录 解压 cd /opt tar -zxvf jdk-8u201-linux-x64.tar.gz 配置环境变量 vi /etc/profil…

Vuex状态管理

1.什么是状态管理 在开发中&#xff0c;我们会让应用程序需要处理各种各样的数据&#xff0c;这些数据需要保存在我们应用程序中的某一个位置&#xff0c;对于这些数据的管理我们就 称之为是状态管理。 在Vue开发中&#xff0c;我们使用组件化的开发方式: 1.在组件中我们定义…

【相机方案】智能驾驶的域控采用的“串行器和解串器”方案的总结(持续更新),SerDes,GMSL

SerDes是Serializer/Deserializer的缩写&#xff0c;即串行器和解串器。由于同轴线的传输延迟几乎可以忽略不计&#xff08;ns级别&#xff09;&#xff0c;相当于将原来只能短距离传输的高速并行信号(MIPI/I2C/CLK等)的传输距离延长&#xff0c;真正做到高带宽、低延迟、长距离…

蓝桥杯刷题--RDay5

清理水域--枚举 8.清理水域 - 蓝桥云课 (lanqiao.cn)https://www.lanqiao.cn/problems/2413/learning/?page1&first_category_id1&second_category_id3&tags2023 小蓝有一个n m大小的矩形水域&#xff0c;小蓝将这个水域划分为n行m列&#xff0c;行数从1…

【QT+QGIS跨平台编译】056:【pdal_kazhdan+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、pdal_kazhdan介绍二、pdal下载三、文件分析四、pro文件五、编译实践一、pdal_kazhdan介绍 pdal_kazhdan 是 PDAL(Point Data Abstraction Library)相关的 Kazhdan 算法的实现。PDAL 是一个用于处理和分析点云数据的开源库,而 Kazhdan 算法通常…

AI提速 OpenAI 新模型GPT-5今年上线?

这两天&#xff0c;有关OpenAI新模型 GPT-5的消息又多了起来。有知情人士称&#xff0c;OpenAI将在今年年中的某个时候发布GPT-5&#xff0c;很可能是在今年夏天期间。OpenAI CEO 萨姆奥特曼在一次播客采访中透露“GPT-5的智能水平得到提升”。 有趣的是&#xff0c;播客的主理…

Latex表格制作详细教程(table, tabular, multirow, multicolumn)

一、简单表格制作 Latex表格需要用到 table 和 tabular 环境。其中 table 环境里写表格的标题(caption&#xff09;、表格的位置之类的。 tabular 环境则是绘制表格的内容。一个简单的表格绘制代码如下所示&#xff1a; \documentclass{article}\begin{document}\begin{table…

三防平板定制服务:亿道信息与个性化生产的紧密结合

在当今数字化时代&#xff0c;个性化定制已经成为了市场的一大趋势&#xff0c;而三防平板定制服务作为其中的一部分&#xff0c;展现了数字化技术与个性化需求之间的紧密结合。这种服务是通过亿道信息所提供的技术支持&#xff0c;为用户提供了满足特定需求的定制化三防平板&a…

猫冻干可以每天吃吗?5大优选品牌脆弱肠胃闭眼入

近年来&#xff0c;冻干猫粮作为备受追捧的高品质猫粮&#xff0c;吸引了越来越多养猫人的关注&#xff0c;对于像我这样的养猫达人来说&#xff0c;早已尝试并认可了冻干喂养。但对于新手来说&#xff0c;他们可能会感到困惑&#xff1a;冻干到底是什么&#xff1f;猫冻干可以…