【算法与数据结构】77、LeetCode组合

news2024/11/24 22:55:14

文章目录

  • 一、题目
  • 二、解法
  • 三、完整代码

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。

一、题目

在这里插入图片描述

二、解法

  思路分析:如果k是固定的,最直接的方法就是建立k个for循环,将结果全部压入result容器中。很可惜,k不固定,因此暴力解法写不出来。这道题应该用递归+回溯算法来求解,程序当中的backtracking是主要递归函数,利用一个for循环遍历,依次将遍历的数压入path这个临时容器当中,当path的大小=k说明已经找到一个组合,则将path加入result当中,然后将刚加入的数弹出(例如path=[1 2], 已经加入Result,将2弹出,然后path当中会压入3, 变成[1 3]),如此循环,结束时得到所有的组合。

在这里插入图片描述

  进一步做剪枝优化,改变循环的终止条件:

i <= n
i <= n - (k - path.size()) + 1

在这里插入图片描述  程序如下

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 - (k - path.size()) + 1; i++) { // 剪枝优化
            path.push_back(i);  // 处理节点
            backtracking(n, k, i + 1);  // 递归
            path.pop_back();    // 回溯,撤销处理的节点
        }
    }
public:
    vector<vector<int>> combine(int n, int k) {
        backtracking(n, k, 1);
        return result;
    }
};

复杂度分析:

  • 时间复杂度: O ( n ∗ 2 n ) O(n*2^n) O(n2n)
  • 空间复杂度: O ( n ) O(n) O(n)

三、完整代码

# include <iostream>
# include <vector>
using namespace std;

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 - (k - path.size()) + 1; i++) { // 剪枝优化
            path.push_back(i);  // 处理节点
            backtracking(n, k, i + 1);  // 递归
            path.pop_back();    // 回溯,撤销处理的节点
        }
    }
public:
    vector<vector<int>> combine(int n, int k) {
        backtracking(n, k, 1);
        return result;
    }
};

int main() {
    int n = 4, k = 2;
    Solution s1;
    vector<vector<int>> result = s1.combine(n, k);
    for (vector<vector<int>>:: iterator it = result.begin(); it != result.end(); it++) {
        for (vector<int>::iterator jt = (*it).begin(); jt != (*it).end(); jt++) {
            cout << *jt << " ";
        }
        cout << endl;
    }
    system("pause");
    return 0;
}

end

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

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

相关文章

Verilog刷题[hdlbits] :Always if2

题目&#xff1a;Always if2 A common source of errors: How to avoid making latches 一个常见的错误来源:如何避免产生latches When designing circuits, you must think first in terms of circuits: 在设计电路时&#xff0c;必须首先考虑电路: I want this logic gate…

【Spring】c命名和p命名空间注入

p命名空间注入 导入p名称空间 xmlns:p"http://www.springframework.org/schema/p"直接输入p就会有相关的属性弹出 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xml…

若依分离版——定时调度

定时调度操作简单&#xff0c;只需在已有的service方法添加component&#xff0c;并在定时任务中添加任务即可。 一、在已有service类上加上Component("TestTask") Component("TestTask") //定时调度任务 public class SysTestServiceImpl implements …

学生用的台灯护眼的哪种比较好?专业的护眼台灯分享

对于学生而言&#xff0c;台灯是必不可少的一盏桌面照明灯具&#xff0c;尤其是在夜间不管是读书、写字还是使用观看电子屏幕&#xff0c;都需要一个光源稳定、柔和的台灯。而这些需要考虑到照度、色温、蓝光、频闪等参数&#xff0c;所以挑选一盏台灯时千万不能马虎&#xff0…

python 视频硬字幕去除 内嵌字幕去除工具 vsr

项目简介 开源地址&#xff1a;https://github.com/YaoFANGUK/video-subtitle-remover Video-subtitle-remover (VSR) 是一款基于AI技术&#xff0c;将视频中的硬字幕去除的软件。 主要实现了以下功能&#xff1a; 无损分辨率将视频中的硬字幕去除&#xff0c;生成去除字幕后…

AI:66-基于机器学习房价预测

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

【代码扫描修复】不安全的反序列化攻击(高危)

目录 一、漏洞描述1.1 摘要&#xff1a;1.2 漏洞解释&#xff1a;1.3 修复建议 二、知识补充2.1 反序列化的历史2.2 什么是序列化、反序列化&#xff1f;补充&#xff1a;Java 对象序列化为二进制 2.3 序列化/反序列化库2.4 反序列化漏洞 三、漏洞复现&#xff1a;攻击链13.1 依…

jacoco和sonar

目录 jacoco 引入依赖 构建配置修改 单元测试 生成报告 查看报告 报告说明 1. Instructions 2. Branches 3. Cyclomatic Complexity 4. Lines 5. Methods 6. Classes sonar7.7 基础环境 需要下载软件 解压文件并配置 运行启动 jacoco 引入依赖 <dep…

CAP定理一文带你速解(通俗易懂,图文并茂)

目录 CAP定理 概述 Consistence&#xff08;一致性&#xff09; Availability &#xff08;可用性&#xff09; Partition Tolerance&#xff08;分区容错性&#xff09; 保证P&#xff0c;为什么无法同时满足AC&#xff1f; CP与AP如何取舍 CAP定理是分布式事务的基础…

Node.js |(五)包管理工具 | 尚硅谷2023版Node.js零基础视频教程

学习视频&#xff1a;尚硅谷2023版Node.js零基础视频教程&#xff0c;nodejs新手到高手 文章目录 &#x1f4da;概念介绍&#x1f4da;npm&#x1f407;安装npm&#x1f407;基本使用&#x1f407;生产依赖与开发依赖&#x1f407;npm全局安装&#x1f407;npm安装指定包和删除…

机器视觉工程师注意高新待遇来了,非标设备厂家早就布局海外市场,国内大多数企业是谋生存情况下,而更具有大局观的企业走出去则是谋发展

冬天来了&#xff0c;大家记得多添点衣服&#xff0c;记得穿秋裤&#xff01; 当各个厂家都在国内抢订单的时候&#xff0c;更多的非标设备厂家早已走向海外&#xff0c;布局海外市场&#xff0c;或者在新的领域积极开展新的业务。为自身公司带来大量海外订单。 别的企业都是…

Excel 转 Json 、Node.js实现(应用场景:i18n国际化)

创作灵感来源于在线转换是按照换行符去转换excel内容换行符后很难处理 本文是按单元格转换 const xlsx require(node-xlsx) const fs require(fs) const xlsxData xlsx.parse(./demo.xlsx) // 需要转换的excel文件// 数据处理 方便粘贴复制 const data xlsxData[2].data …

汽车发动机各系统部件构造图解及名称大全(超详细)

我们都知道发动机是汽车的心脏,相信大家都有东拼西凑的学一些发动机知识,今天汽车维修网小编给大家系统的整理整个发动机的基础知识,如果能认真看完,相信肯定有所收获。全文3065字,81幅结构图,建议收藏、分享后再慢慢看。 首先我们来看一下 发动机总成构造图解 发动机…

zookeeper:启动原理

主类&#xff1a; QuorumPeerMain, 其中调用了main对象的initializeAndRun方法&#xff0c; 首先定义了QuorumPeerConfig对象&#xff0c;然后调用了parse方法&#xff0c;parse方法代码如下&#xff1a; 其中调用的parseProperties方法的代码如下&#xff1a; 可以看到&am…

嵌入式C语言自我修养《数据存储与指针》学习笔记

目录 一、数据类型和存储 1.大端模式和小端模式 2.有符号数和无符号数 二、数据对齐 1.为什么要数据对齐 2.结构体对齐 3.联合体对齐 三、数据的可移植性 四、 Linux内核中的size_t类型 五、typedef的使用 1. typedef的基本用法 2.使用typedef的优势 3. typedef的作用域 六…

前端常用的版本管理工具

一、是什么 版本控制&#xff08;Version control&#xff09;&#xff0c;是维护工程蓝图的标准作法&#xff0c;能追踪工程蓝图从诞生一直到定案的过程。此外&#xff0c;版本控制也是一种软件工程技巧&#xff0c;借此能在软件开发的过程中&#xff0c;确保由不同人所编辑的…

汽车驾驶智能座舱太阳光模拟器老化试验

一、太阳光模拟器老化试验目的 太阳光模拟器氙光灯老化试验是一种常用的材料老化测试方法&#xff0c;通过模拟自然光照条件下的老化过程&#xff0c;评估材料的耐光性能和耐候性能其主要目的有: 1.评估材料在长时间暴露于自然光照条件下的耐久性能: 2.比较不同材料的耐光性…

龙芯loongarch64服务器编译安装scipy

前言 根据我之前的文章介绍&#xff0c;龙芯loongarch64服务器中的很多python依赖包安装有问题&#xff0c;发现其中安装的"scikit-learn"就无法正常使用&#xff0c;所有这里在 pip3 install scikit-learn -U -i https://pypi.tuna.tsinghua.edu.cn/simple 的时候发…

telnet的使用

用于查看 某个ip某个端口通不通 telnet 136.126.122.123 6380 这个代表通了

NLP项目windows环境搭建

一、安装Anaconda Free Download | Anaconda 二、安装PyCharm PyCharm&#xff1a;JetBrains为专业开发者提供的Python IDE 三、创建Python虚拟环境 1. 打开命令窗口 "开始"菜单中找到Anaconda3 - Anaconda Powershell Prompt 说明&#xff1a; Anaconda Power…