代码随想录算法训练营第二十四天 | 回溯算法终于开始了!77. 组合

回溯算法终于开始了!

题目链接:leetcode 77. 组合

文章讲解:代码随想录 77. 组合讲解

视频讲解:带你学透回溯算法-组合问题(对应力扣题目:77.组合)

思路和解法

题目:
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。
想法:
这道题的思路和想象中的回溯有点区别,我以为回溯是可以不需要额外的太多考虑,而只考虑递归即可。但事实上需要自己先做好一些细节处理工作,比如这道题,递归函数的构思是需要计划好的,因为本身并不存在一个树结构,因此在思考解题过程中需要自己给出一个树的结构,比如选了1,剩下的就要从234里选这样。所以我想应该是再考虑用回溯算法解题时,无论如何要先尝试用树结构画出一幅图像然后再思考递归函数的逻辑。另外感觉这个递归函数的设计还是非常灵活的,自己如果有想法还是要自信一点尝试多写写。剪枝优化这个也需要思维敏捷才行,多练习吧。

class Solution {
public://排列组合是暴力求解的问题,在求解过程中会画出树形结构,因此考虑到用回溯算法解决//递归函数参数和返回值:void 参数n, k其他想到再加 需要指定起始数字//需要存储一条结果vector<int> path;vector<vector<int>> result;void backTracking(int n, int k, int startIndex) {//终止条件if (path.size() == k) {//存入结果result.push_back(path);//自己忘记写return了return ;}//递归处理过程 从startIndex开始,每个都放入path一次,然后向下递归//然后考虑剪枝优化 一共需要k个数字,当前有path.size()个,还需要k-path,size()个,根据i的情况来看,还剩n-i+1个,所以需要k-path.size()<=n-i+1,i<=path.size()-k+n+1;或者n-(k-path.size())+1// for (int i = startIndex; i <= n; i++) {//     path.push_back(i);//     backTracking(n, k, i + 1);//     path.pop_back();// }for (int i = startIndex; i <= n - (k - path.size() ) + 1; i++) {path.push_back(i);backTracking(n, k, i + 1);path.pop_back();}return ;}vector<vector<int>> combine(int n, int k) {path.clear();result.clear();backTracking(n, k, 1);return result;}
};

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

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

相关文章

贝塞尔曲线(Bezier Curve)原理、公式推导及matlab代码实现

目录 参考链接 定义 直观理解 公式推导 一次贝塞尔曲线&#xff08;线性公式&#xff09; 二次贝塞尔曲线&#xff08;二次方公式&#xff09; 三次贝塞尔曲线&#xff08;三次方公式&#xff09; n次贝塞尔曲线&#xff08;一般参数公式&#xff09; 代码实现 参考链接…

C语言入门第二节-概述C语言

C语言入门第二节-概述C语言 一.C语言的程序结构 1.当前最新的C语言标准为c11&#xff0c;在他之前的C语言标准为c99&#xff1b; 2.结构主要包括&#xff1a;1.预处理指令&#xff0c;2.函数&#xff0c;3,变量&#xff0c;4.语向和表达式&#xff0c;5.注释 #include<std…

基于局部信息提取的人脸标志检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 人脸检测 4.2 局部区域选择 4.3 特征提取 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .........................................…

java面试题(23):Spring Bean如何保证并发安全

1 问题分析 我们知道默认情况下&#xff0c;Spring中的Bean是单例的&#xff0c;所以在多线程并发访问的时候&#xff0c;有可能会出现线程安全问题。 2 解决方案 有几个方面的解决思路&#xff1a; 我们可以设置Bean的作用域设置为原型&#xff08;prototype&#xff09;&a…

一篇文章带你彻底了解flex布局

哈喽&#xff0c;大家好呀&#xff0c;我是前端理想哥&#xff0c;今天我们来聊聊 flex 布局。 好&#xff0c;主角登场。 CSS 弹性盒子模型( Flexible Box 或者 Flexbox ) 先来看看它的定义&#xff1a;弹性布局是指通过调整其内元素的宽高&#xff0c;从而在任何显示设备上…

Qt实现在5种情况下快速求最值

1. 求最大值 const T &qMax(const T &a, const T &b) 举例&#xff1a; float value1 20; float value2 30; float result qMax(value1, value2); qDebug() << "Result:" << result; 结果&#xff1a;Result: 30 2. 求最小值 const …

【02】mapbox js api加载arcgis切片服务

需求&#xff1a; 第三方的mapbox js api加载arcgis切片服务&#xff0c;同时叠加在mapbox自带底图上 效果图&#xff1a; 形如这种地址去加载&#xff1a; http://zjq2022.gis.com:8080/demo/loadmapbox.html arcgis切片服务参考链接思路&#xff1a;【01】mapbox js api加…

基于gd32f103移植freemodbus master 主栈

1.移植freemodbus master需要先移植RT-Thread操作系统 GD32F103C8T6移植 RTT Nano 教程-CSDN博客 2.移植freemodbus master协议栈 在移植了RTT以后,我们需要移植就只有串口相关的函数 移植freemodbus master协议栈具体步骤 下载移植freemodbus master协议栈 源码添加协议栈…

多字段枚举类型定义

如何定义枚举类型&#xff0c;包含两个字段。 public enum TypeNnum {TYPE_1("TYPE_1", 1),TYPE_2("TYPE_2", 2),;private String name;private Integer value;TypeNnum( String name, Integer value) {this.value value;this.name name;}public String…

2024 1.13~1.19 周报

一、本周计划 确定论文题目&#xff0c;重新思考能加的点子&#xff0c;重点在网络架构部分。主要了解了注意力模块如SE、CBAM、CA&#xff0c;在模型中插入注意力模块。读论文。 二、完成情况 2.1 论文题目 基于注意力的Unet盐体全波形反演 想法来源&#xff1a;使用的是二维…

全新AI助手结合GPT4、Dalle3和Midjourney图文创作

MidTool AI助手&#xff08;迷图网(MidTool)-免费ChatGPT中文版和Midjourney的AI绘画聊天软件&#xff09;是一个集成了多种人工智能技术的平台&#xff0c;旨在为用户提供全面的智能服务体验。它融合了GPT-4、DALLE 3和Midjourney等先进的AI工具&#xff0c;每个工具都有其独特…

【LeetCode热题100】【子串】滑动窗口最大值

题目 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1a; 输入&#xff1a;nums [1,3,-1,-3,5,3,6,7], …

【方法】如何合并多个PDF文件?

多个PDF文件&#xff0c;想合并成一个文件&#xff0c;要怎么操作呢&#xff1f; 如果PDF文件的数量少&#xff0c;并且页数也不多&#xff0c;可以试试将内容复制黏贴到Word文档&#xff0c;再转为PDF格式&#xff1b;如果文件数量多&#xff0c;页数也多&#xff0c;就不太合…

小白编程题:圣诞礼物

描述 圣诞节就要到了&#xff0c;同学准备了一个超级好玩儿的游戏--代码接力&#xff0c;acmer排成一队。首先&#xff0c;前两名acmer玩游戏。然后失败者走到队尾&#xff0c; 赢得acmer将和下一个acmer比赛&#xff0c;等等。直到有acmer连续赢得n场比赛&#xff0c;则这个…

原型设计 Axure RP 9

Axure RP 9是一款专业的原型设计和协作工具&#xff0c;让用户快速创建高保真度的交互原型&#xff0c;模拟真实的用户界面和交互体验。该软件界面布局合理&#xff0c;易于使用&#xff0c;提供丰富的交互功能和效果&#xff0c;如动态面板、变量、条件逻辑、动画等。同时支持…

边缘计算的挑战和机遇——数据安全与隐私保护

边缘计算的挑战和机遇 边缘计算面临着数据安全与隐私保护、网络稳定性等挑战&#xff0c;但同时也带来了更强的实时性和本地处理能力&#xff0c;为企业降低了成本和压力&#xff0c;提高了数据处理效率。因此&#xff0c;边缘计算既带来了挑战也带来了机遇&#xff0c;需要我…

室内机器人区域覆盖算法仿真测试平台设计与实现(预告)

前一篇&#xff1a; 户外机器人区域覆盖算法仿真测试平台设计与实现&#xff08;预告&#xff09; 基本完全是人工智能生成的内容。 之前此课题只是课程中的一个项目案例。 ROS1云课→32愉快大扫除 但是可以感觉到过于宽泛&#xff0c;没有任何具体实践&#xff0c;比如使用…

MCM备赛笔记——熵权法

Key Concept 熵权法是一种基于信息熵概念的权重确定方法&#xff0c;用于多指标决策分析中。信息熵是度量信息量的不确定性或混乱程度的指标&#xff0c;在熵权法中&#xff0c;它用来反映某个指标在评价过程中的分散程度&#xff0c;进而确定该指标的权重。指标的分散程度越高…

2024年1月19日Arxiv最热CV论文:RAP-SAM: Towards Real-Time All-Purpose Segment Anything

2024年1月19日Arxiv最热CV论文&#xff1a;RAP-SAM: Towards Real-Time All-Purpose Segment Anything 实时全能分割新篇章&#xff0c;谷歌 RAP-SAM模型让一切皆可分割&#xff01; 引言&#xff1a;探索实时全能分割的新篇章 在计算机视觉领域&#xff0c;基于Transformer…

C语言中宏定义中#和##使用详解

目录&#xff09; 一、简介二、使用详解2.1 # 是将后面的字符串加“”变成编译器眼中的字符串2.2 ## 是将两串字符联接成一串 三、其他相关链接1、C语言常用函数详细总结2、C语言中指针、数组作为作为函数参数使用总结3、C语言常见数据类型字节数和打印格式总结4、C语言、Makef…