组合(力扣77)

embedded/2025/2/8 21:08:26/

从这道题开始,我们正式进入回溯算法的学习。之前在二叉树中只是接触到了一丢丢,而这里我们将使用回溯算法解决很多经典问题。

那么这道题是如何使用回溯算法的呢?在讲回溯之前,先说明一下此题是如何递归的。毕竟回溯递归不分家,必须先有递归,才会有回溯。而这里的递归就是在缩小范围后的集合中使用for循环选择数字。举个例子:最开始的集合有1,2,3,4,那么我们第一次一定是从这个集合中选一个数。为了保证之后不重复选择1,我们下一步一定是从2,3,4这个集合中选一个数,以此类推。我们可以发现被选择集合的范围在不断缩小。还有就是,需要考虑组合的无序性(1,2和2,1是相同的组合),那么每一层递归中的for循环的遍历范围都要改变,这就需要设置一个变量来控制。接下来讲一下回溯,我们需要写一个for循环将递归函数包起来,这个for循环的作用是遍历当前集合的所有数,假设在第一个集合中我们已经选了1这个数,然后递归选择第二个数,那么在选择第二个数的递归函数结束之后,我们可以将1弹出存储组合的数组,并通过for循环选择第一个集合中的第二个数,这样就得到了其他组合情况。这道题大家可以当做模版题记下来,之后的回溯算法的代码风格都与这道题大差不差。可以结合我下面的代码及注释理解这道题。

代码及注释如下:

class Solution {
private:vector<vector<int>> result; // 存放符合条件结果的集合vector<int> path; // 用来存放符合条件结果void backtracking(int n, int k, int startIndex) {if (path.size() == k) {result.push_back(path);return;}for (int i = startIndex; i <= n; i++) {path.push_back(i); // 处理节点backtracking(n, k, i + 1); // 递归path.pop_back(); // 回溯,撤销处理的节点}}
public:vector<vector<int>> combine(int n, int k) {result.clear(); // 可以不写path.clear();   // 可以不写backtracking(n, k, 1);return result;}
};


http://www.ppmy.cn/embedded/160622.html

相关文章

怎么编写AI模型prompt(提问,表达需求)

在编写用于与AI模型交互的prompt时&#xff0c;遵循一些最佳实践可以提高交互的效果和效率。以下是一些编写prompt的规范和建议&#xff1a; 1. 明确目标 清晰表达需求&#xff1a;确保你的prompt明确表达了你希望AI完成的任务或回答的问题。避免模糊或含糊不清的表述。具体化…

大模型 Llama 微调如何适配中文_词表扩展

Llama 是 Meta AI 开源的一系列大型语言模型 (LLM)&#xff0c;在各种 NLP 任务上表现出色。然而&#xff0c;Llama 主要是在英文语料上进行预训练的&#xff0c;对中文的支持相对较弱。为了让 Llama 更好地服务于中文用户&#xff0c;我们需要对其进行微调 (Fine-tuning)&…

NodeList 对象

NodeList 对象 概述 NodeList 对象是 DOM(文档对象模型)中的一种特殊类型,它代表了文档中一组元素的集合。NodeList 对象通常通过查询 DOM 树来获取,例如使用 document.querySelectorAll() 方法。NodeList 对象在 JavaScript 中非常有用,因为它允许开发者以编程方式遍历…

【Day34 LeetCode】动态规划DP Ⅶ 打家劫舍

一、动态规划DP Ⅶ 打家劫舍 1、打家劫舍198 首先确定dp数组&#xff0c;dp[i]表示从0~i房间最大可以获得的金额数 然后确定dp方程&#xff0c;对于当前房间i&#xff0c;dp[i]取决于偷不偷当前房间&#xff0c;如果偷当前房间&#xff0c;则前一个房间不能包括&#xff0c;如…

【Spring Boot】自动配置源码解析

目录 Spring-Boot-Starter 一、准备配置类和 Bean 对象二、自动配置条件依赖三、Bean 的参数获取 3.1 EnableConfigurationProperties 注解3.2 ConfigurationProperties 注解 四. Bean 的发现 4.1 自己项目的 Bean 扫描4.2 jar 包的 Bean 扫描 五. Bean 的加载 自动配置总结 …

RabbitMQ深度探索:死信队列

死信队列产生背景&#xff1a; RabbitMQ 死信队列俗称 备胎队列&#xff1a;消息中间件因为某种原因拒收该消息后&#xff0c;可以转移到私信队列中存放&#xff0c;死信队列也可以有交换机和路由 key 等 生产死信队列的原因&#xff1a; 消息投递到 MQ 存放&#xff0c;消息已…

通信易懂唠唠SOME/IP——SOME/IP消息格式

SOME/IP是Scalable service-Oriented MiddlewarE over IP (SOME/IP)的缩写&#xff0c;基于IP的可扩展面向服务的中间件。广泛应用于汽车行业嵌入式通信。 它是基于服务的&#xff0c;服务可以由0个或多个Event,Method,Field组成。 Event是一种单向的数据传输&#xff0c;在数…

【R】Dijkstra算法求最短路径

使用R语言实现Dijkstra算法求最短路径 求点2、3、4、5、6、7到点1的最短距离和路径 1.设置data&#xff0c;存放有向图信息 data中每个点所在的行序号为起始点序号&#xff0c;列为终点序号。 比如&#xff1a;值4的坐标为(1,2)即点1到点2距离为4&#xff1b;值8的坐标为(6,7)…