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.hqwc.cn/news/162623.html

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

相关文章

性能测试知多少---了解前端性能

我的上一篇博文中讲到了响应时间&#xff0c;我们在做性能测试时&#xff0c;能过工具可以屏蔽客户端呈现时间&#xff0c;通过局域网的高宽带可以忽略数据传输速度的障碍。这并不是说他们不会对系统造成性能影响。相反&#xff0c;从用户的感受来看&#xff0c;虽然传输速度受…

深度学习_9_图片分类数据集

散装代码&#xff1a; import matplotlib.pyplot as plt import torch import torchvision from torch.utils import data from torchvision import transforms from d2l import torch as d2ld2l.use_svg_display()# 通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式…

pix2tex - LaTeX OCR 安装使用记录

系列文章目录 文章目录 系列文章目录前言一、安装二、使用三、少侠请留步&#xff0c;点赞、收藏、关注 前言 项目地址&#xff1a;这儿 一、安装 版本要求 Python: 3.7 PyTorch: >1.7.1 安装&#xff1a;pip install "pix2tex[gui]" 注意&#xff1a;Pyside6…

领域认知智能走向落地,B端企业还缺些啥?

大模型如何为我所用&#xff1f; 这是当下B端众多企业都在深入思考的一个问题。今年以来&#xff0c;大模型在办公、对话、搜索等领域所展现出的强大能力&#xff0c;让越来越多B端企业意识到大模型对于业务的巨大价值。 因此&#xff0c;领域认知智能迅速成为B端企业关注的焦…

2-爬虫-代理池搭建、代理池使用(搭建django后端测试)、爬取某视频网站、爬取某视频网站、bs4介绍和遍历文档树

1 代理池搭建 2 代理池使用 2.1 搭建django后端测试 3 爬取某视频网站 4爬取某视频网站 5 bs4介绍和遍历文档树 1 代理池搭建 # ip代理-每个设备都会有自己的IP地址-电脑有ip地址---》访问一个网站---》访问太频繁---》封ip-收费&#xff1a;靠谱稳定--提供api-免费&#xff…

Apache Doris (五十二): Doris Join类型 - Broadcast Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. Broadcast Join原理

freertos多任务

以前我们都是一个任务&#xff0c;假设现在我们创建三个任务,项目工程在上一节网盘 #include "stm32f10x.h" // Device header #include "freertos.h" #include "task.h" #include "usart.h"TaskHandle_t myTaskHan…

Codeforces Round 906 (Div. 2--ABC)

A.Doremys Paint 3 题目 一个元素全为整数的数组&#xff0c;如果满足相邻两个元素和相同&#xff0c;我们就认定此数组is good。给定一个长度为n的数组a&#xff0c;可以任意改变元素顺序&#xff0c;判定数组a是否is good。 输入 首行t测试数据数量&#xff0c; 每组数据…

新一代构建工具Vite-xyphf

一、什么vite? vite:是一款思维比较前卫而且先进的构建工具,他解决了一些webpack解决不了的问题——在开发环境下可以实现按需编译&#xff0c;加快了开发速度。而在生产环境下&#xff0c;它使用Rollup进行打包&#xff0c;提供更好的tree-shaking、代码压缩和性能优化&…

【GEE】基于GEE-Landsat8数据集地表温度反演(LST热度计算)

老样子&#xff0c;最近在做生态方面的项目&#xff0c;然后需要分析城市的热岛效应&#xff0c;想了想还是用GEE计算比较简单&#xff0c;直接下载影像太麻烦了。所以在网上看看了资料&#xff0c;踩了踩坑终于是将代码写出来了。秉承着取之于民、用之于民的想法&#xff0c;今…

windows10编译高版本openssl

参考文章 参考文章中的windows编译为低版本&#xff0c;在高版本的openssl编译中已经没有&#xff1a;“ms\do_ms.bat”这个脚本了&#xff0c;现记录下编译过程 1、准备工作 安装ActivePerl&#xff0c;安装后会自动写入环境变量&#xff0c;参照参考文章测试安装成功与否&a…

【监控指标】监控系统-prometheus、grafana。容器化部署。go语言 gin框架、gRPC框架的集成

文章目录 一、监控有哪些指标二、prometheus、grafana架构Prometheus 组件Grafana 组件架构优点 三、安装prometheus和node-exporter1. docker pull镜像2. 启动node-exporter3. 启动prometheus 四、promql基本语法五、grafana的安装和使用1. 新建空文件夹grafana-storage&#…