leetcode77.组合

news/2025/3/10 4:55:32/

leetcode77.组合

组合

题目抽象

我们把组合问题抽象为以下树形结构:

在这里插入图片描述

我们将上图的树形结构称之为决策树,从决策树中我们可以看出,n决定决策树的宽度即循环次数,而k决定决策树的深度即递归次数

在这里插入图片描述

我们挑选出某一具体路径来进行分析。我们在得到[1,2]后递归返回,想要再得到[1,3],就需要把2

“还回去”,因此,这便是一道经典的回溯问题

回溯三部曲

  • 确定递归函数的函数头

首先我们要定义两个全局变量

  • vector<vector<int>> ret:存放最终返回值
  • vector<int> path:存放某一符合要求的结果

也可以将这两个全局变量当作参数传递给递归函数

void dfs(int n, int k, int start)

start用来确定下一层递归的开始位置,调用下一层递归函数时传入start+1,可以避免取到重复元素

  • 单层遍历的过程

for循环中,istart位置开始遍历,path存放取到的值,调用下一层递归,递归结束后回溯

for(int i=start;i<=n;i++)
{path.push_back(i);dfs(n,k,i+1);path.pop_back();
}
  • 确定递归函数终止条件

path.size() == k时递归终止,将path加入ret中后返回

if(path.size() == k)
{ret.push_back(path);return;
}

完整代码

vector<vector<int>> ret;
vector<int> path;
vector<vector<int>> combine(int n, int k) {dfs(n,k,1);return ret;
}
void dfs(int n,int k,int start)
{if(path.size() == k){ret.push_back(path);return;}for(int i=start;i<=n-k+path.size()+1;i++){path.push_back(i);dfs(n,k,i+1);path.pop_back();}
}

http://www.ppmy.cn/news/1577985.html

相关文章

nexus 实现https 私有镜像搭建

1、安装nexus 1.1 安装JDK17 rpm -ivh jdk-17.0.13_linux-x64_bin.rpm 1.2 下载安装包解压到指定目录 tar zxvf nexus-3.77.2-02-unix.tar.gz -C /usr/local 2、运行nexus 默认8081端口 cd /usr/local/nexus-3.77.2-02 && bin/nexus start 3、配置nexus私有docker 镜…

c++进阶--map和set的使用

大家好&#xff0c;昨天我们学习了二叉搜索树&#xff0c;今天我们来学习一下map和set容器的使用。 目录 1. map和set的使⽤ 1.1 序列式容器和关联式容器 2. set系列的使⽤ 2.1 参考文档 2.2 set类的介绍 2.3 set的构造和迭代器 2.4 set的增删查 2.5 insert和迭代器…

【Linux】外接硬盘管理

查看外接硬盘信息 连接外接硬盘后&#xff0c;使用以下命令识别设备&#xff1a; lsblk&#xff1a;列出块设备及其挂载点 lsblk示例输出可能显示设备名称如 /dev/sdb。 通过 lsblk -f 可同时显示文件系统类型和 UUID。 fdisk -l&#xff1a;列出所有磁盘的分区信息&#xff…

鸿蒙全栈开发 D1

鸿蒙全栈开发 第一天 第一部分&#xff1a;鸿蒙操作系统基础 1.1 鸿蒙发展史&#xff08;深度解析&#xff09; #mermaid-svg-QW2y2PboFUhVWGlV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QW2y2PboFUhVWGlV .…

大模型应用:多轮对话(prompt工程)

概述 在与大型语言模型&#xff08;如ChatGPT&#xff09;交互的过程中&#xff0c;我们常常体验到与智能助手进行连贯多轮对话的便利性。那么&#xff0c;当我们开启一个新的聊天时&#xff0c;系统是如何管理聊天上下文的呢&#xff1f; 一、初始上下文的建立 1. 创建新会…

RocketMQ提供了哪些过滤机制?

前言 本篇文章比较简单&#xff0c;分别介绍RocketMQ支持几种过滤机制&#xff0c;其原理和使用。 RocketMQ 提供了多种消息过滤机制&#xff0c;帮根据业务需求高效筛选消息&#xff0c;可以减少不必要的消息传输和处理。以下是其核心过滤机制及使用场景&#xff1a; 1. Tag…

【2025】Electron + React 架构筑基——从零到一的跨平台开发

引言 源代码仓库&#xff1a; Github仓库【electron_git】 你是否厌倦了在命令行中反复输入git status&#xff0c;却依然无法直观看到文件变化&#xff1f; 是否羡慕VS Code的丝滑Git集成&#xff0c;却苦恼于无法定制自己的专属工具&#xff1f; 本专栏将为你打开一扇新的…

《AI大模型专家之路》No.2:用三个模型洞察大模型NLP的基础能力

用三个模型洞察大模型NLP的基础能力 一、项目概述 在这个基于AI构建AI的思维探索项目中&#xff0c;我们实现了一个基于BERT的中文AI助手系统。该系统集成了文本分类、命名实体识别和知识库管理等功能&#xff0c;深入了解本项目可以让读者充分了解AI大模型训练和推理的基本原…