leetcode第77题组合

ops/2025/3/4 7:26:53/

原题出于leetcode第77题https://leetcode.cn/problems/combinations/

1.树型结构

2.回溯三部曲

  1. 递归函数的参数和返回值

  2. 确定终止条件

  3. 单层递归逻辑

3.代码

二维数组result
一维数组path
void backtracking(n,k,startindex){if(path.size==k){result.append(path);return ;}for(i=startindex;i<=n;i++){path.push(i);backtracking(n,k,i+1);path.pop();    }return ;
}

4.剪枝算法(长度为k时的剪枝)

由于要求组合的长度为k,故若遍历到某个数时,其后面刚好有k-1个数,则这个数即为应当遍历的最后一个数。如下图树型结构所示:

可以在遍历时对i的范围进行调整,调整逻辑如下:

  • 首先,我们要知道当前选取了多少个元素,即path.size()

  • 其次,计算还需要选取多少个元素:k-path.size();

  • 假设此时取到的数为x,则还未取的数的范围是[x,n],故有:

n-x+1>=k-path.size()

解得:x<=n-(k-path.size)+1

所以i的取值到n-(k-path.size)+1即可,具体代码如下:

二维数组result
一维数组path
void backtracking(n,k,startindex){if(path.size==k){result.append(path);return ;}for(i=startindex;i<=n-(k-path.size)+1;i++){path.push(i);backtracking(n,k,i+1);path.pop();    }return ;
}

文章中有关树型结构的图片出自代码随想录,这是一个非常好的算法平台,强烈推荐学算法的同学看一看


http://www.ppmy.cn/ops/162989.html

相关文章

Git GitHub基础

git是什么&#xff1f; Git是一个分布式版本控制系统&#xff0c;用于管理源代码的变更。它允许多个开发者在同一个项目上协作&#xff0c;同时跟踪每个修改的历史记录。 关键词&#xff1a; 分布式版本控制软件 软件 安装到我们电脑上的一个工具 版本控制 例如论文&…

文生图开源模型发展史(2014-2025年)

文生图开源模型的发展历程是一段充满技术革新、社区生态繁荣与商业化竞争的多维度演进史。 一、技术萌芽期&#xff08;2014-2020年&#xff09; 核心突破 2014年&#xff1a;GAN&#xff08;生成对抗网络&#xff09;诞生&#xff0c;首次实现数据驱动式图像生成&#xff0…

2 Redis 字符串(String) 命令大全

Redis 提供了丰富的字符串类型操作命令&#xff0c;支持设置、获取、修改、追加等多种功能。本文整理了常用的 Redis 字符串命令&#xff0c;并附带详细示例&#xff0c;方便学习和复习。 1. SET 命令 作用&#xff1a;设置指定 key 的值。 示例&#xff1a; SET mykey &quo…

Element Plus中el-tree点击的节点字体变色加粗

el-tree标签设置 <el-tree class"tree":data"treeData":default-expand-all"true":highlight-current"true"node-click"onTreeNodeClick"><!-- 自定义节点内容&#xff0c;点击的节点字体变色加粗 --><!-- 动…

判断按键盘是否好使的开机自启动PowerShell脚本

一、ps1脚本 文件名&#xff1a;KeyboardCheck.ps1 Function WaitForKeyPress($TimeoutInSeconds) {$KeyPressed $false$deadline (Get-Date).AddSeconds($TimeoutInSeconds)# 显示提示信息Write-Host "请在 $TimeoutInSeconds 秒内按下任意键(长时间没有检测到按下按…

PyTorch的.pt文件详解

之前我们已经讨论了字符级语言模型的训练、保存结构以及数据集下载。现在我们需要深层次的进行实际项目的训练,需要深入理解模型保存的机制,特别是在PyTorch中.pt文件的具体内部结构和内容,.pt文件保存了哪些具体内容,比如参数、架构还是其他信息,以及这些数据是如何组织的…

常用空间数据结构对比

空间数据结构是用来组织和查询多维空间数据的算法结构。它们在地理信息系统 (GIS)、计算机图形学、机器人导航、机器学习等领域非常重要。以下是几种常见空间数据结构的对比&#xff1a; 1. 四叉树&#xff08;Quadtree&#xff09; 适用场景&#xff1a;二维空间数据&#x…

自学微信小程序的第六天

DAY6 1、使用录音API首先需要通过wx.getRecorderManager()方法获取到一个RecorderManager实例,该实例是一个全局唯一的录音管理器,用于实现录音功能。 表32:RecorderManager实例的常用方法 方法名称 说明 start() 开始录音 pause() 暂停录音 resume() 继续录音 stop() 停止…