leetCode 77.组合 + 回溯算法 (bactracking) + 剪枝 + 图解 + 笔记

news2024/11/25 2:52:49

77. 组合 - 力扣(LeetCode)

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

示例 1:

输入:n = 4, k = 2
输出:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]

示例 2:

输入:n = 1, k = 1
输出:[[1]]

(一)了解回溯算法 

  1. for 循环遍历集合区间,可以理解为一个节点有多少个孩子,这个for循环就执行多少次。
  2. backtracking(递归)自己调用自己。
  3. 实现递归由上图可以看出,for循环可以理解是横向遍历,backtracking 就是纵向遍历

 (二)backtracking + 图解 

递归三步曲:

  • ① 首先,确定递归函数的参数返回值
  • ② 确定递归的终止条件
  • ③ 确定单层搜索的逻辑
void backtracking(参数) {
    if(终止条件) {
        存放结果;    
        return;        
    }
    for(选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
        处理节点;
        backtracking(路径,选择列表);//递归
        回溯,撤销处理结果
    }
}
  1. 一维数组:path 用来收集路径
  2. 二维数组:result 存放path,作为结果集
  3. startIndex 用来控制每次搜索的位置
class Solution {
public:
    vector<int> path; // 用来存放符合条件单一结果
    vector<vector<int>> result; // 存放符合条件结果的集合
    void bactracking(int n,int k,int startIndex) {
        // 回溯函数终止条件
        if(path.size() == k) { 
            // 用result二维数组,把path保存起来,并终止本层递归
            result.push_back(path);
            return;
        }
        // 单层搜索的过程
        for(int i=startIndex;i<=n;i++) { // 控制树的横向遍历 
            path.push_back(i); // 处理节点
            bactracking(n,k,i+1); // 递归:控制树的纵向遍历,注意下一层搜索要从 i + 1 开始
            path.pop_back(); // 回溯,撤销处理的节点
        }
    }
    vector<vector<int>> combine(int n, int k) {
        bactracking(n,k,1);
        return result;
    }
};

(三)剪枝操作

class Solution {
private:
    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 (int i = startIndex; i <= n - (k - path.size()) + 1; i++) { // i为本次搜索的起始位置(优化的地方)
            path.push_back(i); // 处理节点
            backtracking(n, k, i + 1);
            path.pop_back(); // 回溯,撤销处理的节点
        }
    }
public:

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

参考和推荐文章、视频:

代码随想录 (programmercarl.com)icon-default.png?t=N7T8https://www.programmercarl.com/0077.%E7%BB%84%E5%90%88.html#%E6%80%9D%E8%B7%AF带你学透回溯算法-组合问题(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1ti4y1L7cv/?vd_source=a934d7fc6f47698a29dac90a922ba5a3

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

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

相关文章

Java小游戏飞翔的小鸟

游戏界面 运行界面 开发准备 1、eclipse开发工具 二、创建游戏窗口 Mains类作为主类&#xff0c;在mian方法下定义一个m1()方法&#xff0c;设置窗口。 //定义一个初始化的游戏窗口方法 public static void m1() {//获取底层窗口界面的工具类JFrame jf new JFrame();//创建…

计算机组成原理-页式存储器

文章目录 页式存储虚拟地址vs实地址页表&#xff1a;逻辑页->主存块号地址交换过程地址交换过程&#xff08;增加TLB&#xff09;总结 页式存储 把程序分散式地放到主存的不同块的地方 虚拟地址vs实地址 操作系统将逻辑地址映射到主存块中的物理地址&#xff0c;对应的物…

测试也应该具备的项目管理能力

前言 前几天在技术交流群有同学问到&#xff1a;“需求不明确&测试时间不足&#xff0c;经常加班&#xff0c;交付质量也不太好&#xff0c;该如何处理”&#xff1f; 群里其他同学很热心的给出了分析和建议&#xff0c;比如&#xff1a; 评估是否是技术问题&#xff0c…

报表生成器Stimulsoft用户手册:深入报告

Stimulsoft Reports 是一款报告编写器&#xff0c;主要用于在桌面和Web上从头开始创建任何复杂的报告。可以在大多数平台上轻松实现部署&#xff0c;如ASP.NET, WinForms, .NET Core, JavaScript, WPF, Angular, Blazor, PHP, Java等&#xff0c;在你的应用程序中嵌入报告设计器…

echarts 水波图

echarts 水波图 安装 npm install echarts --save npm install echarts-liquidfill --save引入 import * as echarts from echarts; import echarts-liquidfill;html <div id"chart1" ref"chart1" class"chart1"></div>css .cha…

echarts散点图(象限图)设置不同的颜色

如图所示&#xff1a; <template><div ref"sdtcmijy" :style"{height:scrollerHeight}"></div> </template> <script> import {getXxt} from ./../requestAPI.jsexport default {data(){return {params:{},seriesData:[],…

深入解析:Peft Adapter与LLM融合

在增量预训练阶段或有监督微调阶段使用高效微调方法(Lora)时会产生adapter文件,相当于是一个“补丁”。那么如何将“补丁”与原始模型合并呢? 下面将对模型合并代码进行解读。 相关代码将全部上传到github: https://github.com/hjandlm/LLM_Train 欢迎关注公众号 代码…

数据结构与算法之美学习笔记:26 | 红黑树(下):掌握这些技巧,你也可以实现一个红黑树

目录 前言实现红黑树的基本思想插入操作的平衡调整删除操作的平衡调整解答开篇内容小结 前言 本节课程思维导图&#xff1a; 红黑树是一个让我又爱又恨的数据结构&#xff0c;“爱”是因为它稳定、高效的性能&#xff0c;“恨”是因为实现起来实在太难了。对于绝大部分开发工程…

【Java Spring】SpringBoot 配置文件

1、Spring Boot配置文件 整个项目中所有重要的数据都是在配置文件中配置的&#xff0c;比如&#xff1a; 数据库连接信息&#xff08;包括用户名和密码的设置&#xff09;项目的启动端口第三方系统的调用密钥等信息用于发现和定位问题的普通日志和异常日志等 Spring Boot配置…

希宝猫罐头怎么样?专业人士告诉你适口性好的猫罐头推荐

通过本文&#xff0c;我将与大家分享我做宠物医生6年间发现的好用的猫罐头品牌&#xff0c;并分享猫罐头喂养的小知识。那么希宝猫罐头好吗&#xff1f; 希宝猫罐头用了很高级的加工方法&#xff0c;还很注重包装和密封&#xff0c;包装设计特别时尚&#xff0c;特别好看&…

MS2630——Sub-1 GHz、低噪声放大器芯片

产品简述 MS2630 是一款 Sub-1 GHz 低功耗、低噪声放大器 (LNA) 芯 片。芯片采用先进制造工艺&#xff0c;采用 SOT23-6 的封装形式。 主要特点 ◼ 典型噪声系数&#xff1a; 1.57dB ◼ 典型功率增益&#xff1a; 16.3dB ◼ 典型输出 P1dB &#xff1a; -9.2dBm…

Nacos 2.X核心架构源码剖析

概述 注册中心并发处理&#xff0c;1.4.x 写时复制&#xff0c;2.1.0 读写分离&#xff1b;nacos 一般使用 AP 架构&#xff0c;即临时实例&#xff0c;1.4.x 为 http 请求&#xff0c;2.1.0 优化为 gRPC 协议&#xff1b;源码中使用了大量的事件通知机制和异步定时线程池&…

window上64位和32位的区别

在电脑上安装系统和软件的时候&#xff0c;经常会出现32位系统和64系统的选项&#xff0c;那么Windows64位系统和32位系统的区别具体在哪里&#xff0c;很多人都是比较模糊&#xff08;比如说我....&#xff09;的&#xff0c;那么今天小黑就来详细的科普下这两个系统究竟有什么…

Maven回顾

Maven 下载&#xff08;前提要有jdk&#xff09; Maven 下载地址&#xff1a;Maven – Download Apache Maven 设置 Maven 环境变量 添加环境变量 MAVEN_HOME&#xff1a; 右键 "计算机"&#xff0c;选择 "属性"&#xff0c;之后点击 "高级系统设置…

Python列表:操作与实例分析,你值得一看!

Python列表是一种重要的数据结构&#xff0c;它允许您存储和管理多个数据项。本文将深入探讨Python列表的操作&#xff0c;以及通过具体实例分析如何使用它们&#xff0c;以帮助您更好地理解和优化您的代码。 什么是Python列表&#xff1f; Python列表是一种有序、可变的数据结…

使用 Java 来读取 Excel 文件,检查每一行中的 URL,并将不符合条件的行标记为红色

-- 日、时、分、秒&#xff0c;这是计时的单位&#xff0c;惜时就应该惜日、惜时、惜分、惜秒。 用 Java 来读取 Excel 文件&#xff0c;检查每一行中的 URL&#xff0c;并将不符合条件的行标记为红色。以下是一个简单的示例&#xff0c;使用 Apache POI 进行 Excel 操作&#…

饺子馆外卖点餐系统小程序效果如何

餐饮行业所涵盖的细分类目非常广&#xff0c;同时又是经济发展的重要支撑&#xff0c;市场规模非常高。饺子是很多人非常喜欢吃的食物&#xff0c;尤其过年的时候&#xff0c;必是少不了几碗饺子&#xff0c;平时也有大量人前往饺子馆。 但相对比火锅、炒菜馆则少些竞争力&…

《山水间的家》第二季收官,国台酒业解锁中国式浪漫

执笔 | 洪大大 编辑 | 萧 萧 近日&#xff0c;由国台酒特别支持的大型文旅探访节目《山水间的家》第二季在总台央视综合频道&#xff08;CCTV-1&#xff09;正式收官。 第二季节目以家庭为视角切入&#xff0c;先后走进江苏、四川、重庆、江西、湖北、贵州、浙江等地24个特色…

【Java】实现一个自己的线程池

上文中我们讲了线程池的简单使用&#xff0c;这里我们来讲一下如何简单实现一个自己的线程池 本文实现这个线程池所达到的效果是&#xff1a;用户给出线程数目&#xff0c;程序根据用户给出的数创建固定数目的线程 1、框架 首先写定义一个线程池类 class MyThreadPool{}pub…

DBeaver连接MySQL提示“Public Key Retrieval is not allowed“问题解决方式

更新时间&#xff1a;2023年10月31日 11:37:53 作者&#xff1a;产品人小柒 dbeaver数据库连接工具,可以支持几乎所有的主流数据库.mysql,oracle.sqlserver,db2 等等,这篇文章主要给大家介绍了关于DBeaver连接MySQL提示"Public Key Retrieval is not allowed"问…