代码随想录训练营Day24:● 理论基础 ● 77. 组合

理论基础

回溯算法解决的问题

回溯法,一般可以解决如下几种问题:
组合问题:N个数里面按一定规则找出k个数的集合
切割问题:一个字符串按一定规则有几种切割方式
子集问题:一个N个数的集合里有多少符合条件的子集
排列问题:N个数按一定规则全排列,有几种排列方式
棋盘问题:N皇后,解数独等等

回溯算法的模板

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

77.组合

题目链接

https://leetcode.cn/problems/combinations/description/

题目描述

在这里插入图片描述

思路

刚开始的想法就是使用两层for循环暴力求解,但是发现只能满足集合为 2 的情况,如果 k = 3,甚至更大的话,就需要更多层的for循环,所以这种方式不可行,看了视频以后发现这种情况属于回溯方法的一种需要穷尽每一种情况,所以需要用到回溯算法
再回顾一下回溯算法的模板,请看第一部分
下边是本题的解题方案:

本题的终止条件是集合的大小等于 k 的时候,就将小集合添加到大集合当中,并结束这个方法,结束的时候会回到调用出也就是 trackback(n,k,i+1);,回到这里以后会继续执行下边的语句,也就是 list1.remove(list1.size()-1);,这里的意思就是将上一个给移除,继续下一种可能的结果
list.add(new ArrayList<>(list1));这句要注意,不能直接写成list.add(list1);,这会破坏原有添加进去的元素,必须新建一个列表然后将 list1作为参数传进去,形成一个新的列表

class Solution {List<List<Integer>> list = new ArrayList<>();List<Integer> list1 = new ArrayList<>();public List<List<Integer>> combine(int n, int k) {trackback(n,k,1);return list;}public void trackback(int n,int k,int start){if(list1.size()==k){list.add(new ArrayList<>(list1));return;}for (int i = start; i <= n; i++) {list1.add(i);trackback(n,k,i+1);list1.remove(list1.size()-1);}}
}

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

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

相关文章

腾讯云图形验证码的PHP示例

需要准备的 1.API密钥 SecretId 及 SecretKey 两部分&#xff0c; SecretId 用于标识 API 调用者的身份&#xff0c; SecretKey 用于加密签名字符串和服务器端验证签名字符串的密钥。 前往API密钥管理页面&#xff0c;即可进行获取 https://console.cloud.tencent.com/cam/ca…

swagger踩坑之请求类不显示具体字段

swagger踩坑之请求类不显示具体字段 省流&#xff1a;枚举字段需要加上ApiModelProperty注解 过程复现&#xff1a; TestEnum 枚举不加注解&#xff0c;swagger的UI类不显示详细字段 Data Accessors(chain true) ApiModel(value "test对象", description &quo…

基于SSM SpringBoot vue办公自动化计划管理系统

基于SSM SpringBoot vue办公自动化计划管理系统 系统功能 登录注册 个人中心 员工信息管理 部门信息管理 会议管理 计划管理 行程安排管理 行程进度管理 管理员管理 开发环境和技术 开发语言&#xff1a;Java 使用框架: SSM(Spring SpringMVC Mybaits)或SpringBoot 前端…

空间解析几何之直线与平面:推导直线与直线、直线与平面交点

空间解析几何——直线与平面 三维空间中的直线和平面与二维空间中的性质有一定的类似之处&#xff0c;但是其相交关系的求解方式有所差异。本文回顾了三维空间中直线和平面的解析表达&#xff0c;然后推导线-线、线-面交点。 平面 空间平面的表达式为&#xff1a; A x B y…

Java面向对象案例之描述专业和学生(4)

类的方法图 学生类&#xff1a; 属性&#xff1a;学号&#xff0c;姓名&#xff0c;年龄&#xff0c;所学习的专业方法&#xff1a;学习的方法&#xff0c;描述学习状态。描述内容包括姓名、学号、年龄、所学习的专业信息 专业类&#xff1a; 属性&#xff1a;专业编号&#xf…

音乐制作的最佳选择FL Studio v21.2.3.4004 破解版2024最新下载

FL Studio v21.2.3.4004&#xff1a;音乐制作的最佳选择 随着音乐技术的发展&#xff0c;越来越多的人开始制作自己的音乐。其中&#xff0c;FL Studio作为一款集成了音序器、采样器、效果器、混响等多种功能的音乐制作软件&#xff0c;备受音乐制作人的青睐。而最新版的FL St…

倒计时30,28天

1.队列Q (nowcoder.com) //1. #include<bits/stdc.h> using namespace std; #define int long long const int N2e56; const int inf0x3f3f3f3f; int dir[13]{0,31,28,31,30,31,30,31,31,30,31,30,31}; const double piacos(-1.0); int a[N],b[N]; bool cmp(int xx,int …

HTML+CSS3+Bootstrap第一章例子大全

纯手打&#xff0c;请大家多多支持&#xff08;拱手 目录 例1-1选择器的使用 例1-2盒子模型 项目1-1三栏定位 例1-3圆角区域 ​编辑例1-4特殊边框效果 例1-5对象阴影 例1-6线性渐变 例1-7径向渐变 项目1-2许愿墙 例1-1选择器的使用 <!DOCTYPE html> <html&g…

SAP CAP篇十五:写个ERP的会计系统吧,Part II

本文目录 本系列文章目标开发步骤数据库表设计初始数据初始数据&#xff1a;AccountCategories初始数据&#xff1a;AccountUsages初始数据&#xff1a;ChartOfAccounts初始数据&#xff1a;AccountSubjects Service 定义生成Fiori AppApp运行 本系列文章 SAP CAP篇一: 快速创…

[RAM] RAM 突发传输(Burst ,Burst size, length) | Burst 读写过程与时序 精讲

主页&#xff1a; 元存储博客 文章目录 前言1. Burst 基本概念含义Burst Width &Burst Length 2. CPU Burst mode3. 总线 burst mode总线的仲裁总线突发传输时序 4. Burst Chop (突发终止)5. Burst Mode 应用什么时候用突发模式 总结 前言 在DMA&#xff08;直接内存访问&…

电脑那个部件坏了或者是哪个软件需要修复来看价钱

电脑维修价格表是多少&#xff1f; 价格取决于计算机的哪个部分损坏或哪个软件需要修复。 由于电脑中的部件非常多&#xff0c;而且会以各种奇怪的方式出现问题&#xff0c;下面我们就来看看具体的充电方法。 电脑维修价格表&#xff1a; 1. 重新安装系统。 安装XP系统通常需…

Spring Boot轻松整合Minio实现文件上传下载功能【建议收藏】

一、Linux 安装Minio 安装 在/root/xxkfz/soft目录下面创建文件minio文件夹&#xff0c;进入minio文件夹&#xff0c;并创建data目录&#xff1b; [rootxxkfz soft]# mkdir minio [rootxxkfz soft]# cd minio [rootxxkfz minio]# mkdir data执行如下命令进行下载 [rootxxkf…

TinyEMU之Linux Kernel编译

TinyEMU之Linux Kernel编译 1 准备工作2 安装RISC-V交叉编译器3 编译Linux Kernel4 镜像格式转换 本文属于《 TinyEMU模拟器基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 准备工作 我们需要&#xff0c;下载以下内容。 编译好的RISC-V交叉编译器&#xff1a;riscv64-…

使用 URLDecoder 和 URLEncoder 对中文字符进行编码和解码

请直接看原文: 使用 URLDecoder 和 URLEncoder 对中文字符进行编码和解码_urldecoder.decode-CSDN博客 ------------------------------------------------------------------------------------------------------------------------------- 摘要&#xff1a; URLDecoder 和…

linux最佳入门(笔记)

1、内核的主要功能 2、常用命令 3、通配符&#xff1a;这个在一些启动文件中很常见 4、输入/输出重定向 意思就是将结果输出到别的地方&#xff0c;例如&#xff1a;ls标准会输出文件&#xff0c;默认是输出到屏幕&#xff0c;但是用>dir后&#xff0c;是将结果输出到dir文…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Tabs)

通过页签进行内容视图切换的容器组件&#xff0c;每个页签对应一个内容视图。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 该组件从API Version 11开始默认支持安全区避让特性(默认值为&#x…

Netty线程模型详解

文章目录 概述单Reactor单线程模型单Reactor多线程模型主从Reactor多线程模型 概述 Netty的线程模型采用了Reactor模式&#xff0c;即一个或多个EventLoop轮询各自的任务队列&#xff0c;当发现有任务时&#xff0c;就处理它们。Netty支持单线程模型、多线程模型和混合线程模型…

C/C++火柴棍等式

有n根(n<24)火柴棍&#xff0c;你可以拼出多少个形如“ABC"的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零&#xff0c;则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示: 依次需要用到的火柴棍数目为6 2 5 5 4 5 6 3 7 6 。 如果是初学者可能会这么写。 …

【MyBatis-Plus】最优化持久层开发 快速入门 核心功能介绍与实战 3.5.3.1

文章目录 一、简介二、快速入门三、MyBatis-Plus核心功能3.1 基于Mapper接口CRUD3.1.1 Insert方法3.1.2 Delete方法3.1.3 Update方法3.1.4 Select方法3.1.5 自定义和多表映射 3.2 基于Service接口CRUD3.2.1 对比Mapper接口CRUD区别&#xff1a;3.2.2 使用Iservice接口方式3.2.3…

oj-超级密码

小明今年9岁了&#xff0c;最近迷上了设计密码&#xff01;今天&#xff0c;他又设计了一套他认为很复杂的密码&#xff0c;并且称之为“超级密码”. 说实话&#xff0c;这套所谓的“超级密码”其实并不难&#xff1a;对于一个给定的字符串&#xff0c;你只要提取其中的数字&am…