算法刷题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();
        }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS实战开发-使用OpenGL实现2D图形绘制和动画。

介绍 基于XComponent组件调用Native API来创建EGL/GLES环境&#xff0c;从而使用标准OpenGL ES进行图形渲染。本项目实现了两个示例&#xff1a; 使用OpenGL实现2D的图形绘制和动画&#xff1b;使用OpenGL实现了在主页面绘制两个立方体&#xff0c;光源可以在当前场景中移动&…

智能电网将科技拓展至工厂之外的领域

【摘要/前言】 物联网已然颠覆我们日常生活的许多层面。在家居方面&#xff0c;家电变成连网设备&#xff0c;不仅让我们能控制灯光与上网购物&#xff0c;甚至在出门时提供安全功能。在工业领域&#xff0c;智能工厂改变产品制造的方式。工业物联网(IIoT)不仅让制造商更加敏捷…

启明智显M4核心板驱动17寸屏 为您打造无与伦比的视觉盛宴

近日&#xff0c;启明智显推出M4核心板驱动17寸屏&#xff0c;8 Link LVDS接口下1280*1024分辨率为用户展现了超强的视觉体验。 M4核心板采用纯国产架构&#xff0c;内置了16位DDR内存&#xff0c;为设备提供强大的数据处理能力和高效的运行速度。无论是处理复杂的任务还是进…

关于create table as

create table as这个语句的不熟悉&#xff0c;这个语句建表导致的表主键、索引、auto_increment的丢失。 该语句对"列结构"是可以正常复制的&#xff0c;只有索引、主键等信息会丢失&#xff0c;原以为"AUTO_INCREMENT"是属于id这一列的列信息&#xff0c;…

JSON字符串中获取一个特定字段的值

JSON字符串中获取一个特定字段的值 一、方式一&#xff0c;引用gson工具二、方式二&#xff0c;使用jackson三、方式三&#xff0c;使用jackson转换Object四、方式四&#xff0c;使用hutool&#xff0c;获取报文数组数据 一、方式一&#xff0c;引用gson工具 测试报文&#xf…

医学图像目标跟踪论文阅读笔记 2024.03.14~2024.04.01

“Moving vehicle tracking based on improved tracking–learning–detection algorithm” 2019年 期刊 IET Computer Vision 计算机科学4区 基于改进后的TLD算法&#xff08;ITLD&#xff0c;improved TLD&#xff09;对车辆进行long-term单目标跟踪。 改进内容&#xff1…

Authing 正在寻找云原生应用 / Infra 开发者

我们是 Authing&#xff0c;成立于 2019 年&#xff0c;我们是一家平均年龄 95 后的年轻创业公司&#xff0c;现在是中国最大、最领先的身份云基础设施&#xff08;Identity as a Service, IDaaS&#xff09;提供商&#xff0c;我们的产品服务了全国各地数百家客户和数十家世界…

思迈特:“人工智能+”浪潮里,国产BI到了关键时刻

作为首个“AI程序员”&#xff0c;Devin最近参与了一系列工作&#xff0c;包括在人力资源外包平台Upwork完成编程工作&#xff1b;潜入一家明星创业公司内部群交流&#xff0c;为公司CTO调整代码方案等。这让整个软件工程行业大受震撼&#xff0c;程序员留言“刷屏”。 “AI…

做海外问卷调查有什么技巧和方法?纯干货讲解

做海外问卷调查无外乎几个步骤&#xff1a;选国家、做人设、测题目、刷题目。每个步骤都有一定的技巧&#xff0c;但是它的技巧成分不是很明显。 国家的选择一般以发达国家为主&#xff0c;国家越发达问卷的数量越多&#xff0c;正常白天做题主流国家选择&#xff1a;新加坡、…

蓝桥杯每日一题:有序分数(递归)

给定一个整数 N&#xff0c;请你求出所有分母小于或等于 N&#xff0c;大小在 [0,1] 范围内的最简分数&#xff0c;并按从小到大顺序依次输出。 例如&#xff0c;当 N5 时&#xff0c;所有满足条件的分数按顺序依次为&#xff1a; 0/1,1/5,1/4,1/3,2/5,12/,35,2/3,3/4,4/5,1/…

HarmonyOS实战开发-存储空间统计(仅对系统应用开放)

介绍 本示例通过应用程序包管理、应用空间统计与卷管理模块&#xff0c;实现了查看当前设备存储空间信息、所有安装的应用的存储信息、所有可用卷的存储信息的功能。 效果预览 使用说明&#xff1a; 1.主页面会展示当前设备存储使用的详细信息。 2.点击“应用”&#xff0c;…

继续教育山东第一医科大学临床医学试题及答案,分享几个实用搜题和学习工具 #职场发展#职场发展#笔记

大学生必备的搜题工具&#xff0c;专业课本习题、电子版教材、考研资料、英语四六级等考试题目也能一并搜索&#xff0c;每道题目都有详细的讲解&#xff0c;每个都堪称大学神器。 1.灵兔搜题 这是一个公众号 医学、财经、建筑、计算机、高数、土木.........都可以搜索。 下…

淘宝商品描述API接口:轻松获取商品信息的新途径

淘宝商品描述API接口是淘宝开放平台提供的一种高效、便捷的新途径&#xff0c;旨在帮助开发者轻松获取淘宝商品的详细描述信息。通过这一接口&#xff0c;商家、开发者和用户都能获得商品标题、描述、属性、价格、图片等关键信息&#xff0c;从而满足各种业务需求。 在使用淘宝…

centos7.2系统部署ZooKeeper集群和Kafka集群(集群应用系统商城前置环境)

本次实验将使用centos7.2系统部署部署ZooKeeper集群因为Kafka依赖于ZooKeeper&#xff0c;所以我们一并进行部署。 实验所示的资源软件已上传至百度网盘&#xff0c;需要自取。 链接&#xff1a;https://pan.baidu.com/s/1a-7_iAIX0DBAMkF9bhiTcA?pwd2333 提取码&#xff1…

BLIP 算法阅读记录---一个许多多模态大语言模型的基本组件

论文地址&#xff1a;&#x1f608; 一、环境配置以及数据集准备 数据集准备 官网提供了下载数据集json文件的接口。但是很可能打不开&#xff0c;因为其放在了谷歌云上 https://storage.googleapis.com/ 不过不要担心&#xff0c;网页打不开&#xff0c;咱们可以利用python去…

助力大健康产业发展,深兰科技AI数字伙伴“益小青”亮相世界健博会

4月7日至4月10日&#xff0c;以“健康共同体&#xff0c;科技创未来”为主题的2024年(第六届)世界大健康博览会在武汉隆重举行。大会吸引了千余家知名企业、单位参展&#xff0c;200余位大健康领域重要嘉宾参会。深兰科技携国内首款AI心理陪伴数字人——益小青在展会上公开亮相…

RSA公钥格式公钥结构解析

一次发现RSA der格式公钥2048位&#xff08;256bytes&#xff09;有的长度292有的长度294于是分析了下&#xff1a; [root8f64ba75cbd1 tmp]# ll anewpub.der 1_pub.der -rw------- 1 root root 294 Apr 8 02:48 1_pub.der -rw------- 1 root root 292 Apr 8 02:25 anewpub…

为什么网站速度很重要?

网站速度&#xff0c;也被称为页面加载速度或网站性能&#xff0c;是指用户访问网站时&#xff0c;从发出请求到浏览器完全加载并显示网页内容所需的时间。这个速度的快慢直接影响用户的体验和对网站的整体评价。 为什么网站速度很重要&#xff1f; 网站速度之所以非常重要&a…

数仓调优实战:GUC参数调优

1. 前言 适用版本&#xff1a;【8.1.1及以上】 GaussDB(DWS)性能调优系列专题文章&#xff0c;介绍了数据库性能调优的思路和总体策略。在系统级调优中数据库全局的GUC参数对整体性能的提升至关重要&#xff0c;而在语句级调优中GUC参数可以调整估算模型&#xff0c;选择查询…

移动医保支付

传统就医流程中&#xff0c;涉及“三长一短”的难题&#xff0c;因此根据国家政策及互联网的能力支持&#xff0c;用户在微信或者支付宝上激活医保电子凭证之后&#xff0c;无需在医院窗口排队&#xff0c;即可通过微信小程序或者公众号、支付宝小程序缴纳医保挂号或医保门诊费…