【代码随想录算法训练Day24】LeetCode 77.组合

Day24 回溯

回溯算法的模板:

  • 回溯函数模板返回值以及参数
  • 回溯函数终止条件
  • 回溯搜索的遍历过程

LeetCode 77.组合

回溯的经典问题,在每个路径数组中存入下一个数,再接着递归处理路径中的下一个数。

class Solution {
public:vector<vector<int>> res;vector<int> path;void backtrack(int n,int k,int startIndex){if(path.size()==k){res.push_back(path);return;}for(int i=startIndex;i<=n;i++){path.push_back(i);backtrack(n,k,i+1);path.pop_back();}}vector<vector<int>> combine(int n, int k) {backtrack(n,k,1);return res;}
};

剪枝

回溯本身是暴力的过程,可以看做是递归的循环,所以很多时候回溯是需要剪枝的,把某些不需要的或者不可能的回溯过程删除,达到提高回溯算法效率的目的。
本题的剪枝其实就是缩小遍历的范围,如果剩余元素已经不够我们所需要的集合元素个数,就可以立刻停止搜索,只需要把i的遍历范围修改了即可。

class Solution {
public:vector<vector<int>> res;vector<int> path;void backtrack(int n,int k,int startIndex){if(path.size()==k){res.push_back(path);return;}for(int i=startIndex;i<=n-(k-path.size())+1;i++){path.push_back(i);backtrack(n,k,i+1);path.pop_back();}}vector<vector<int>> combine(int n, int k) {backtrack(n,k,1);return res;}
};

经典的算法开始啦。

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

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

相关文章

vs2022 MSVC2017_64 调试Qt5.14.2源码

pdb调试文件下载路径https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt5_5142/qt.qt5.5142.debug_info.win64_msvc2017_64/ 在vs中添加pdb文件符号路径&#xff0c;使其qt在调试时能查找到相应的符号文件。 在需要调试的解决方案下通过解决方案点击&…

【Linux】日志管理

一、日志进程 1、处理日志的进程 rsyslogd&#xff1a;系统专职日志程序 观察rsyslogd程序&#xff1a; ps aux | grep rsyslogd 2、常见的日志文件 1、系统主日志文件: /var/log/messages 动态查看日志文件尾部&#xff1a; tail -f /var/log/messages 2、安全…

背包问题汇总(01背包、完全背包、多重背包、分组背包)

背包问题 01 背包完全背包多重背包分组背包 01 背包 有 n 件物品&#xff0c;每个物品只能使用一次&#xff0c;在不超过背包体积的情况下&#xff0c;总价值最大是多少&#xff1f; #include <iostream> using namespace std; const int N 1010; int n, m; int v[N],…

C语言-01_HelloWord

文章目录 1.C程序运行机制2.HelloWorld的剖析① main()② 函数体③ printf()④ 标准库、头文件 3.输出3.1 printf()标准格式3.2 占位符3.3 输出格式 1.C程序运行机制 过程1&#xff1a;编辑 编写C语言源程序代码&#xff0c;并已文件的形式存储到磁盘中。源程序文件以“.c”作…

Java复数计算

复数在数学、科学或者工程领域是很常用的&#xff0c;可以通过调用Apache Commons Math库来完成&#xff0c;也可以自己手撸。 一、使用Apache Commons Math库 这个库有多个版本&#xff0c;在写这篇文章时&#xff0c;它的最新版是2022年12月19日的4.0-beta1&#xff0c;构建…

k8s自定义资源你会创建吗

创建自定义资源定义 CustomResourceDefinition 当你创建新的 CustomResourceDefinition&#xff08;CRD&#xff09;时&#xff0c;Kubernetes API 服务器会为你所 指定的每一个版本生成一个 RESTful 的 资源路径。CRD 可以是名字空间作用域的&#xff0c;也可以是集群作用域的…

并发——线程

为了并发的执行任务(程序)&#xff0c;现代操作系统特地引入了“进程”的概念 分析&#xff1a; 1. 进程的地址空间是独立的&#xff0c;进程间通信的代价比较大 如果进程需要进行数据的交换&#xff0c;则需要用到进程间通信(pipe / fifo / shm / msg / .…

VHDL/CPLD硬件描述语言:2022年做的万年历实验

之前接触过一些硬件描述语言以及VHDL/CPLD的单片机的设计实验&#xff0c;那时是2022年了 这里补写一篇笔记,以记录一下那十多个小时 万年历实验 研究中的心得体会&#xff1a; 说明解释都是个人理解&#xff0c;与标准描述有较大出入...... 目录 输入输出器件的编写: 分频器…

HTML5 Web Workers 详解 (2)

三、高级使用 1. 多个 Web Workers 你可以在主线程中创建多个 Web Workers 来处理并行任务。例如&#xff0c;下面的代码创建了两个 Worker 并分别处理不同的任务。 主线程代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"…

8086 汇编笔记(五):包含多个段的程序

一、在代码段中使用数据 “dw”的含义是定义字型数据 dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h code segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hmov bx,0mov ax,0mov cx&#xff0c;8s: add ax cs:[bx]add bx,2loop smov ax,4c00hint 21hcode…

MVC前端定义变量的艺术:深入解析与实战策略

MVC前端定义变量的艺术&#xff1a;深入解析与实战策略 在MVC&#xff08;Model-View-Controller&#xff09;架构中&#xff0c;前端定义变量是一个至关重要的环节。它涉及到数据的存储、传递和展示&#xff0c;直接影响着应用程序的性能和用户体验。本文将从四个方面、五个方…

HBase 常用 shell 操作

下面给大家介绍一些HBase 常用 shell 操作&#xff0c;各位看官看好了啦&#xff0c;我要献丑了。 进入 HBase 客户端命令操作界面 $ bin/hbase shell查看帮助命令 > help查看当前数据库中有哪些表 > list创建一张表 创建 user 表&#xff0c;包含 info、data 两个列…

【Keil 5】Keil 5下载安装激活到2032年(含MDK、C51、STM32单片机)+附带百度网盘链接

这里写目录标题 安装包、激活文件下载1.双击mdk 514开始安装2.一路点next&#xff0c;信息随便写即可3.激活4.安装STM325.激活c51 安装包、激活文件下载 解压密码&#xff1a;lantongxue 链接&#xff1a;https://pan.baidu.com/s/15Aukt0j1HCFyHBE6whuDeg?pwdsjyh 提取码&…

Streamsets-JDBC模式使用更新时间字段数据同步

StreamSets的开源地址&#xff1a;https://github.com/streamsets/datacollector-oss Streamsets官网地址&#xff1a;https://streamsets.com/ Streamsets文档地址&#xff1a;https://docs.streamsets.com/portal/datacollector/3.16.x/help/index.html 我又来写Streamsets了…

LangChain实战技巧之四:当模型(Model)不支持Tool/Function的解决办法

文心大模型两大主力模型已全面免费&#xff0c;可参考我之前发的文章 AI菜鸟向前飞 — 今日三则AI相关新闻 但是&#xff0c;这些模型原生并不支持Tool/Function Call 如下所示&#xff1a; tool def greeting(name: str):向朋友致欢迎语return f"你好啊, {name}"…

基于LabVIEW虚拟示波器设计

随着计算机技术的发展&#xff0c;传统仪器开始向计算机化的方向发展。虚拟仪器是90年代提出的新概念。虚拟仪器技术的提出与发展&#xff0c;标志着二十一世纪自动测试与电子测量仪器领域技术发展的一个重要方向。所谓虚拟仪器&#xff0c;就是在通用的计算机平台上定义和设计…

ROS2自定义服务接口

ROS2自定义服务接口 在src/village_interface 下构建srv文件夹 src/village_interface/srv 下新建一个BorrowMoney.srv 遵循大小写编程规范 # 客户端请求 string name uint32 money # 中间这三个横杠很重要 不能删掉 --- # 服务端响应 bool success uint32 money接口编译 修改…

TDR原理的介绍

目录 简介 简单定义 TDR测试原理 简介 时域和频域就像孪生兄弟一样&#xff0c;经常在测试测量领域同时出现&#xff0c;可谓是工程师们分析问题和解决问题的两大法宝。所以&#xff0c;在某些测试场景中&#xff0c;如果有时域信息的护法&#xff0c;咱们就能从时频域两个维…

创业目标市场的选择和分析

一、市场细分与选择 创业过程中&#xff0c;选择目标市场至关重要。市场细分是将大市场分割成更小的、具有相似需求的群体。市场细分的方法主要有地理、人口、心理和行为四种&#xff1a; 地理细分&#xff1a;根据地区、城市、气候等地理因素进行市场划分。例如&#xff0c;…

【普通切换】【DC-based handover】【DAPS】协议栈分析

移动网络切换 移动通信中切换是保证终端业务的基本流程&#xff0c;而切换时延是终端(UE)不能与任何基站交互(传递)用户面数据包的最短时间。 在5G(NR)网络中当终端(UE)接收到切换命令时&#xff0c;将断开与源小区的连接向目标小区发起随机接入过程。在此期间终端(UE)的数据传…