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

news2025/2/24 15:04:29

回溯理论基础、组合问题

回溯理论基础

回溯能解决的问题

回溯问题

回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案

回溯如何穷举:

横向遍历for循环,纵向遍历backtracking(递归),一般来说,搜索叶子节点就是找的其中一个结果。

注意:如何避免重复,利用startIndex

回溯法模板

回溯函数模板返回值以及参数
回溯算法中函数返回值一般为void。
再来看一下参数,因为回溯算法需要的参数可不像二叉树递归的时候那么容易一次性确定下来,所以一般是先写逻辑,然后需要什么参数,就填什么参数。
回溯函数终止条件
既然是树形结构,那么我们在讲解二叉树的递归 (opens new window)的时候,就知道遍历树形结构一定要有终止条件。所以回溯也有要终止条件。什么时候达到了终止条件,树中就可以看出,一般来说搜到叶子节点了,也就找到了满足条件的一条答案,把这个答案存放起来,并结束本层递归。
回溯搜索的遍历过程
在上面我们提到了,回溯法一般是在集合中递归搜索,集合的大小构成了树的宽度,递归的深度构成的树的深度。
在这里插入图片描述
模板伪代码

void backtracking(参数) {
    if (终止条件) {
        存放结果;
        return;
    }

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

77. 组合

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。

思路: 参照回溯模板即可,重点搞明白 startIndex去重、如何回溯

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;
        }
        //横向遍历,for循环
        for(int i = startIndex; i <= n; i++){
            //startIndex = i+1 用于横向遍历去重,纵向下一层时从i+1进行横向遍历
            path.push_back(i);
            //纵向遍历,递归
            backtracking(n, k, i+1);
            path.pop_back(); //回溯,撤销处理结果
        }
    }

    vector<vector<int>> combine(int n, int k) {
        if(k > n) return result;
        backtracking(n, k, 1);
        return result;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(2024,时空 trasnformer,时空视频分词器,自回归动力学模型,潜在行动模型)Genie:生成式交互环境

Genie: Generative Interactive Environments 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 2. 方法 2.1. 模型组件 2.2. 推理&#xff1a;可控行动视频生成 3. 实验 0. …

数据库orclec;nvl和nvl2的区别

Oracle中nvl()与nvl2()函数详解-CSDN博客 select nvl(null,2) as vb from dual select nvl2(666,2,3) as vb from dual

异常处理(黑马学习笔记)

当前问题 登录功能和登录校验功能我们都实现了&#xff0c;下面我们学习下今天最后一块技术点&#xff1a;异常处理。首先我们先来看一下系统出现异常之后会发生什么现象&#xff0c;再来介绍异常处理的方案。 我们打开浏览器&#xff0c;访问系统中的新增部门操作&#xff0…

如何通过代理IP安全使用Linkedln领英?

LinkedIn是跨境外贸必备的拓客工具&#xff0c;世界各地的许多专业人士都使用领英来作为发布和共享内容的主要工具&#xff0c;这使得它成为跨境出海必备的渠道工具。 但是不少做外贸的朋友都知道&#xff0c;领英账号很容易遭遇限制封禁&#xff0c;但如果善用工具&#xff0…

倾囊相授之性能分析思路

年轻的时候&#xff0c;经常听一些大会或者演讲。有些人说&#xff0c;思路逻辑非常重要。我那时就想&#xff0c;你肯定是瞎忽悠的&#xff0c;因为我怎么就没听懂你说的思路呢&#xff1f; 而现在轮到自己来写或者讲一些东西的时候&#xff0c;才发现他们说得很对&#xff0…

数据分析中生成仪表板制作工具对比,零基础也能实现数据可视化!

#AI生成图表# 仪表板&#xff08;仪表盘&#xff09;在企业做任何数据分析的最后都会需要的&#xff0c;它通过图表、数字、图形和表格等视觉效果&#xff0c;将复杂的数据以直观、易懂的方式展示出来&#xff0c;帮助用户更好地理解数据&#xff0c;以及决策支持和作为一个共…

50kw 直流充电桩测试仪的操作和维护

一、操作步骤 1. 连接电源&#xff1a;将充电桩测试仪的电源线连接到符合规定的电源插座上&#xff0c;确保电源稳定。 2. 连接设备&#xff1a;将充电桩测试仪的测试接口与待测充电桩的充电接口连接&#xff0c;注意接口的对应关系&#xff0c;防止接错。 3. 开机检查&…

请查收:2024年腾讯云服务器优惠价格表_租用配置报价

一张表看懂腾讯云服务器租用优惠价格表&#xff0c;一目了然&#xff0c;腾讯云服务器分为轻量应用服务器和云服务器CVM&#xff0c;CPU内存配置从2核2G、2核4G、4核8G、8核16G、4核16G、8核32G、16核32G、16核64等配置可选&#xff0c;公网带宽1M、3M、5M、12M、18M、22M、28M…

二叉搜索树题目:把二叉搜索树转换为累加树

文章目录 题目标题和出处难度题目描述要求示例数据范围 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;把二叉搜索树转换为累加树 出处&#xff1a;538. 把二叉搜索树转换为累加树 …

Vmware Esxi 部署Mac OS虚拟机

Vmware Esxi在创建虚拟机的时候是有Mac OS选项的&#xff0c;但是实际创建时&#xff0c;选择ISO开机后一直反复引导&#xff0c;是有问题的&#xff0c;原因是需要先解锁&#xff0c;需要在ESXI主机上修改配置并重启。 首先找到管理-服务-TSM-ssh&#xff0c;点击启动&#x…

并查集基础,死去的回忆突然攻击我

并查集普及【模板】并查集 - 洛谷 #include<iostream> #include<cstring> #include<queue> #include<vector> #include<algorithm> using namespace std; #define int long long typedef pair<int,int> PII; #define xx first #define y…

【已解决】c++如何从0配置ffmpeg

本博文源于笔者正在做的任务&#xff0c;将视频mp4每帧转换成jpg格式&#xff0c;前提是需要配置ffmpeg。因此本文从0下载教读者如何配置ffmpeg。 文章目录 1、百度搜索官网2、配置项目3、创建main.cpp测试库与包4、 总结 1、百度搜索官网 官网已经搜索到&#xff0c;我们要找…

ulimit命令

ulimit命令 ulimit 命令用于查看和设置 shell 运行时的资源限制。它可以控制各种资源&#xff0c;如文件打开数量、堆栈大小、CPU 时间等。ulimit 命令通常用于限制 shell 启动的进程的资源使用量&#xff0c;以防止系统资源被耗尽。ulimit命令的主要作用是提高系统的性能和稳…

【C++】类和对象之常引用与运算符重载

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 常引用3. 运算符重载 1. 前言 在之前的文章中提到了常引用&#xff0c;再来看运算符重载之前&#xff0c;先来看看常引用的使用。 2. 常引用 在使用引用的时候可…

西门子WINCC客户端提示“未找到启动画面”

WinCC客户端提示“未找到启动画面”&#xff1f; 在WinCC客户机服务器架构中&#xff0c;多用户客户机互连服务器项目时&#xff0c;有时会弹出“未找到启动画面”的提示对话框&#xff0c;并且选择画面后继续弹出该对话框&#xff0c;无法正常显示画面。 可能的原因有&#x…

DevEco Studio下载与安装(Windows)

下载地址&#xff1a; HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 安装时直接点击 next 即可。 运⾏已安装的DevEco Studio&#xff0c;⾸次使⽤&#xff0c;请选择Do not import settings&#xff0c;单击OK。 1.安装Node.js 如果本地有下载&#xff0c;可以…

利用观测云实现 Kubernetes 多集群可观测

简介 观测云的工作空间接入多个 Kubernetes 集群时&#xff0c;是如何区分不同集群&#xff0c;达到多集群的可观测性&#xff1f; 增加Tag NAMESPACE&#xff1a;DataKit 选举空间&#xff0c;需要设置 ENV_NAMESPACE 环境变量&#xff0c;值为非空字符&#xff0c;不同集群…

稀疏卷积Sparse Convolution

1. 为什么提出稀疏卷积&#xff1f;它有什么好处&#xff1f; 卷积神经网络已经被证明对于二维图像信号处理是非常有效的。然而&#xff0c;对于三维点云信号&#xff0c;额外的维度显著增加了计算量。 另一方面&#xff0c;与普通图像每个像素都有值不同的是&#xff0c;一般…

从0开始python学习-53.python中flask创建简单接口

目录 1. 创建一个简单的请求,没有写方法时默认为get 2. 创建一个get请求 3. 创建一个post请求&#xff0c;默认可以使用params和表单传参 4. 带有参数的post请求 1. 创建一个简单的请求,没有写方法时默认为get from flask import Flask, request# 初始化一个flask的对象 ap…

细菌,支原体,真菌--细胞培养的最大威胁及解决方法

在科研实验中&#xff0c;微生物污染是细胞培养过程中面临的一项长期的严重威胁。侵入的支原体、细菌、酵母菌和真菌可以直接杀死您宝贵的细胞或者彻底改变培养细胞的特性&#xff0c;导致不准确的实验结果&#xff0c;既耗费时间又浪费资源。InvivoGen/欣博盛生物可以提供多种…