Leetcode刷题详解——组合

1. 题目链接:77. 组合

2. 题目描述:

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

你可以按 任何顺序 返回答案。

示例 1:

输入:n = 4, k = 2
输出:
[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],
]

示例 2:

输入:n = 1, k = 1
输出:[[1]]

提示:

  • 1 <= n <= 20
  • 1 <= k <= n

3. 解法(回溯):

3.1 算法思路:

题目要求我们从1到n中选择k个数的所有组合,其中不考虑顺序。也就是说[1,2]和[2,1]等价。我们s需要找出所有的组合,但不能重复计算相同元素的不同顺序的组合。对于选择组合,我们需要进行以下流程:

  1. 所有元素分别作为首位元素进行处理
  2. 在之后的位置上同理,选择所有元素分别作为当前位置元素进行处理
  3. 为避免计算重复组合,规定选择之后位置的元素时必须比前一个元素大,这样就不会有重复的组合

3.2 实现方法:

  1. 定义一个二维数组和一个一维数组。二维数组用来记录所有组合,一维数组用来记录当前状态下的组合
  2. 遍历1到n-k+1,以当前数作为组合的首位元素进行递归(从n-k+1到n作为首元素时,组合中一定不会存在k个元素)
  3. 递归函数的参数为两个数组、当前步骤以及n和k,递归流程如下:
    1. 结束条件:当前组合中已经有k个元素,将当前组合存进二维数组并返回(剪枝:如果当前位置之后的所有元素放入组合也不能满足组合中存在k个元素,直接返回)
    2. 从当前位置的下一个元素开始遍历到n,将元素赋值到当前位置,递归下一个位置
      请添加图片描述

3.3 C++算法代码:

class Solution {vector<int> path; // 用于存储当前路径的数组vector<vector<int>> ret; // 用于存储所有满足条件的路径的二维数组int n, k; // n表示元素个数,k表示每个组合中的元素个数public:vector<vector<int>> combine(int _n, int _k) {n = _n; // 初始化元素个数k = _k; // 初始化每个组合中的元素个数dfs(1); // 从第一个元素开始进行深度优先搜索return ret; // 返回所有满足条件的路径}void dfs(int start) {if (path.size() == k) { // 如果当前路径的长度等于k,说明找到了一个满足条件的路径ret.push_back(path); // 将当前路径添加到结果集中return;}for (int i = start; i <= n; i++) { // 从start开始遍历到npath.push_back(i); // 将当前元素添加到路径中dfs(i + 1); // 继续搜索下一个元素path.pop_back(); // 回溯,将当前元素从路径中移除}}
};

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

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

相关文章

归并排序(c语言代码实现)

归并排序&#xff08;稳定的排序&#xff09;&#xff1a; 归并排序是一种分治策略的排序算法&#xff0c;其基本思想是将待排序数组分成两个子数组&#xff0c;分别对这两个子数组进行排序&#xff0c;然后合并这两个已经排序好的子数组&#xff0c;最终得到完整的已排序数组…

Sentinel黑白名单授权规则解读

目录 基本介绍 代码实战 架构说明 RequestOriginParser的实现类 网关添加请求头 配置授权规则 基本介绍 授权规则可以对请求方来源做判断和控制。 很多时候&#xff0c;我们需要根据调用来源来判断该次请求是否允许放行&#xff0c;这时候可以使用 Sentinel 的来源…

C#学习相关系列之常用符号介绍

一、>符号的用法 >用法主要有两种&#xff0c;第一种是Lambda表达式&#xff0c;第二种是用于赋值&#xff1b; 第一种lambda用法&#xff1a; // 声明一个函数指针的对象, 也就是委托, 其函数签名为string f(Person) Func<Person, string> nameProjection p &…

酒水展示预约小程序的效果如何

酒的需求度非常高&#xff0c;各种品牌、海量经销商组成了庞大市场&#xff0c;而在实际经营中&#xff0c;酒水品牌、经销商、门店经营者等环节往往也面临着品牌传播拓客引流难、产品展示预约订购难、营销难、销售渠道单一等痛点。 那么商家们应该怎样解决呢&#xff1f; 可以…

31.Map集合用法、遍历、排序与常见API

概要&#xff1a; java.util 中的集合类包含 Java 中某些最常用的类。最常用的集合类是 List 和 Map。 Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对&#xff08;称作“键”和“值”&#xff09;&#xff0c;其中每个键映射到一个值。 本文主要介绍java ma…

如何使用VSCode来查看二进制文件

2023年11月6日&#xff0c;周一下午 目录 方法1&#xff1a;安装插件Binary Viewer然后用vscode打开一个二进制文件&#xff0c;并点击右上角的"HEX"方法2&#xff1a;安装插件Binary然后用vscode打开一个二进制文件&#xff0c;并点击右上角的"B" 方法1&…

C-DS二叉树_另一棵树的子树

Description 给你两棵二叉树tree1和tree2,检验tree1中是否包含和tree2具有相同结构和结点值的子树。如果存在,输出true;否则,输出false。 Input 第一行输入t,表示有t个测试样例。 第二行首先输入n1,接着输入n1个整数,表示二叉树tree1。 第三行首先输入n2,接着输入n…

Vite 的基本原理,和 webpack 在开发阶段的比较

目录 1&#xff0c;webpack 的流程2&#xff0c;Vite 的流程简单编译 3&#xff0c;总结 主要对比开发阶段。 1&#xff0c;webpack 的流程 开发阶段大致流程&#xff1a;指定一个入口文件&#xff0c;对相关的模块&#xff08;js css img 等&#xff09;先进行打包&#xff0…

【Unity基础】7.动画状态参数

【Unity基础】7.动画状态参数 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity基础系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;创建动画状态 (1) 创建动画状态 不好意思各位~最近工作比较忙&#xff0c;稍微耽误了这两周的博客。话…

Hydra post登录框爆破

文章目录 无token时的Hydra post登录框爆破带Token时的Hydra post登录框爆破 无token时的Hydra post登录框爆破 登录一个无验证码和token的页面&#xff0c;同时抓包拦截 取出发送数据包&#xff1a;usernameadb&password133&submitLogin 将用户名和密码替换 userna…

项目部署文档

申请SSL证书 先申请,用免费的 下载证书 先将下载下来的保存起来 服务器安装JDK: 创建develop目录 mkdir /usr/local/develop/ 把JDK压缩包上传到/usr/local/develop/目录 解压安装包 并且将安装到指定目录 tar -zxvf /usr/local/develop/jdk-8u191-linux-x64.tar.gz -C /us…

传感与表面分析

传感技术同计算机技术与通信一起被称为信息技术的三大支柱。从物联网角度看&#xff0c;传感技术是衡量一个国家信息化程度的重要标志&#xff0c;作为第二届杭州物联网暨传感技术应用高峰论坛&#xff0c;推进我国传感器产业化快速发展。传感技术是关于从自然信源获取信息&…

【tcl 脚本学习-- tcl 脚本常用命令介绍】

文章目录 TCL在Linux下如何执行TCL 常用语法TCL 中括号和大括号和小括号的详细介绍TCL Catch 命令介绍TCL 中 eval 详细介绍 TCL&#xff08;Tool Command Language&#xff09;是一种动态编程语言&#xff0c;通常用于嵌入到应用程序中以提供脚本功能&#xff0c;或者用于测试…

CMake重要指令常用变量

什么是CMake? 没有使用CMake和使用CMake构建的区别&#xff1f; CMake的基本语法 语法格式&#xff1a; 指令(参数1 参数2...)赋值操作 如 把hello.cpp 赋值给变量HELLO set(HELLO hello.cpp)取变量的值&#xff1a; ${HELLO}但在if控制语句中是直接使用变量名。 if(HEL…

lazarus:数据集快速导出为excel、csv、sql及其他多种格式

lazarus被成为快速开发工具&#xff0c;为什么说“快速”&#xff0c;重要的一点是&#xff0c;很多工具是现成的&#xff0c;可以拿来直接就用。比如数据导出&#xff0c;如果需要把数据集导出为excel格式文件&#xff0c;写代码可能需要很多时间。lazarus就不用了&#xff0c…

Java连接Redis并操作Redis中的常见数据类型

目录 一. Java连接Redis 1. 导入依赖 2. 建立连接 二. Java操作Redis的常见数据类型存储 1. Redis字符串(String) 2. Redis哈希(Hash) 3. Redis列表&#xff08;List&#xff09; 4. Redis集合&#xff08;Set&#xff09; 一. Java连接Redis 1. 导入依赖 pom依赖…

外汇天眼:全员免费,赢奖金!

外汇市场一直以来都是金融投资者的热门领域之一&#xff0c;但对于新手来说&#xff0c;了解和掌握外汇交易可能需要时间和经验。为了帮助新手入门&#xff0c;提高交易技能&#xff0c;外汇模拟交易应运而生。为的是能够零风险无压力地帮助外汇投资者更好地掌握外汇交易的技巧…

【GEE】4、 Google 地球引擎中的数据导入和导出

1简介 在本模块中&#xff0c;我们将讨论以下概念&#xff1a; 如何将您自己的数据集引入 GEE。如何将来自遥感数据的值与您自己的数据相关联。如何从 GEE 导出特征。 2背景 了解动物对环境的反应对于了解如何管理这些物种至关重要。虽然动物被迫做出选择以满足其基本需求&am…

JWT登录校验

工作原理 下面来详细看看 UTF-8 是如何工作的&#xff0c;以及为什么它会根据被编码的字符具有不同的长度。 一、JWT是什么&#xff1f; 在介绍JWT之前&#xff0c;我们先来回顾一下利用token进行用户身份验证的流程&#xff1a; 1、客户端使用用户名和密码请求登录 2、服务端…

Etcd 解析

Etcd 解析 Etcd 是 Kubernetes 集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息。在后面具体的安装环境中,我们安装的 etcd 的版本是 v3.1.5,整个 Kubernetes 系统中一共有两个服务需要用到 etcd 用来协同和存储配置,分别是: 网络插件 flannel、…