代码随想录算法训练营第二十四天|理论基础 77. 组合

news2024/9/29 13:45:10

文章目录

  • 理论基础
  • 77.组合
    • 思路
    • 代码
    • 总结

理论基础

回溯算法:一种暴力搜索方式

回溯是递归的副产品,只要有递归就会有回溯。

回溯法,一般可以解决如下几种问题:

  • 组合问题:N个数里面按一定规则找出k个数的集合
  • 切割问题:一个字符串按一定规则有几种切割方式
  • 子集问题:一个N个数的集合里有多少符合条件的子集
  • 排列问题:N个数按一定规则全排列,有几种排列方式 棋盘问题:N皇后,解数独等等
    在这里插入图片描述

回溯法解决的问题都可以抽象为树形结构

因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深度。

回溯模板

void backtracking(参数) {
    if (终止条件) {
        存放结果;
        return;
    }

    for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
        处理节点;
        backtracking(路径,选择列表); // 递归
        回溯,撤销处理结果
    }
}

77.组合

思路

要解决 n为100,k为50的情况,暴力写法需要嵌套50层for循环,那么回溯法就用递归来解决嵌套层数的问题。

递归来做层叠嵌套(可以理解是开k层for循环),每一次的递归中嵌套一个for循环,那么递归就可以用于解决多层嵌套循环的问题了。

组合问题和排序问题不同,要注意组合中元素没有顺序,所以要注意不能重复

代码

class Solution {
private:
    vector<vector<int>> result;
    vector<int> path;

    void backtracing(int n, int k, int startidx) {
        if(path.size() == k) {
            result.push_back(path);
            return;
        }

        for (int i = startidx; i <= n; i++) {
            path.push_back(i);
            backtracing(n,k,i+1);
            path.pop_back();
        }
    } 
public:
    vector<vector<int>> combine(int n, int k) {
        result.clear();
        path.clear();
        backtracing(n,k,1);
        return result;
    }
};

总结

  1. 按照回溯模板写会比较有逻辑,之前写递归时,也是按照步骤写
  2. 还可以做剪枝操作(看了但没实际改),具体剪枝操作根据题目来

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

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

相关文章

数据安全技术工作部成员动态 | 鸿翼联合天空卫士打造“基于内容的敏感信息处理”解决方案

据2022年统计数据表明&#xff0c;因IT故障、人为错误、供应链攻击、破坏性攻击和勒索软件攻击等原因导致的数据泄露事件频繁发生&#xff0c;信息安全问题比以往任何一个时代都更为突出。信息泄漏造成的危害体现在多方面&#xff0c;不法分子通过各种途径收集的公司的某些重要…

大数据法律监督模型优势特色及应用场景

大数据法律监督平台是基于监督数据整合管理平台、监督模型构建平台、内置模型库以及法律监督线索管理平台打造的一套服务于检察机关法律监督工作的专业化系统。通过数据采集、融合、挖掘、建模、展现等一系列能力&#xff0c;辅助检察官从纷繁复杂的数据中&#xff0c;开展多维…

基于可靠姿态图初始化和历史重加权的鲁棒多视图点云配准

论文作者 | Haiping Wang, Haiping Wang,Haiping Wang,etal 论文来源 | CVPR2023 文章解读 | William 1 摘要 之前的多视图配准方法依赖于穷举成对配准构造密集连接的位姿图&#xff0c;并在位姿图上应用迭代重加权最小二乘(IRLS)计算扫描位姿。但是&#xff0c;构造一个密集…

产品经理必读丨如何找准产品定位?

我们都知道&#xff0c;当一款新产品开始立项之前&#xff0c;势必需要经过谨慎的市场调研才能整合资源启动新的项目&#xff0c;但除此之外&#xff0c;作为产品经理还需要做好一件关键的事情——找准产品在市场中的定位。 什么是产品定位 百度百科对产品定位的解释是非常准确…

重磅新闻!!! ChatGPT手机 app上线苹果app store

就在刚才&#xff0c;打开Tor访问openAI官网准备看看有什么新闻&#xff0c;结果吓我一跳啊&#xff01; &#x1f447;&#x1f447;&#x1f447; ChatGPT app上线APP store了&#xff01; 我马上拿出手机&#xff0c;一搜索&#xff0c;哎~出现了&#xff1a; chatgpt ios …

想端起“铁饭碗”,你最好先学会这个!

正文共 886 字&#xff0c;阅读大约需要 3 分钟 公务员必备技巧&#xff0c;您将在3分钟后获得以下超能力&#xff1a; 快速生成推荐材料 Beezy评级 &#xff1a;B级 *经过简单的寻找&#xff0c; 大部分人能立刻掌握。主要节省时间。 ●图片由Lexica 生成&#xff0c;输入&a…

Linux---cd命令、pwd命令、mkdir命令

1. cd命令 当Linux终端&#xff08;命令行&#xff09;打开的时候&#xff0c;会默认以用户的HOME目录作为当前的工作目录 我们可以通过cd命令&#xff0c;更改当前所在的工作目录。 cd命令来自英文&#xff1a;Change Directory 语法&#xff1a;cd [ linux路径] cd命令…

OpenAI被曝将发布全新开源大模型,网友:GPT平替?

来源 | 量子位 | 公众号 QbitAI OpenAI终于要“Open”了&#xff01; 最新爆料&#xff0c;他们正准备发布全新的开源语言模型。 GPT-2之后&#xff0c;这尚属四年来首次。 不少网友戳戳手表示期待&#xff1a;这是要发自己的开源平替了吗&#xff1f; 毕竟目前最好的开源…

单片机--SPI协议

目录 【1】SPI协议 1.SPI协议 2.SPI时序 【2】LCD液晶显示屏 【3】点亮LCD显示屏 图片显示 汉字显示 【1】SPI协议 1.SPI协议 SPI(Serial Peripheral Interface)是 摩托罗拉公司(Motorola)首先提出的全双工同步串行外设接口&#xff0c;采用主从模式&#xff08;Master、…

webpack核心原理

背景 Webpack 特别难学&#xff01;&#xff01;&#xff01; 时至 5.0 版本之后&#xff0c;Webpack 功能集变得非常庞大&#xff0c;包括&#xff1a;模块打包、代码分割、按需加载、HMR、Tree-shaking、文件监听、sourcemap、Module Federation、devServer、DLL、多进程等…

传感云智慧公厕综合解决方案,实现公厕精细化管理

随着国家“公厕革命”建设工作的持续推动与科技创新技术的不断进步&#xff0c;人们对“方便”与“卫生”的要求越来越高&#xff0c;智慧公厕已然成为智慧城市建设规范下的公共厕所新形态&#xff0c;不仅可以解决传统公厕的脏乱差、异味和管理难题&#xff0c;同时可以为用户…

前端 之 FormData对象进阶

一、进阶知识 在前一篇博客中&#xff0c;我讲解了FormData对象的基础概念、相关方法和基本用法&#xff0c;本篇博客我将讲解一些FormDate对象相关的进阶知识&#xff0c;主要包含FormData与其他对象结合使用的各类场景&#xff0c;以及一些使用技巧。 1、FormData对象、JSO…

在一个不小但很美的公司里工作

在这个公司里学到了什么 电商交易前业务&#xff1a;商品&#xff0c;库存&#xff0c;物流&#xff0c;会员 &#xff1b; 电商广告部分业务&#xff1a; 网红&#xff0c;联盟&#xff1b; 并且对这些业务里的核心流程&#xff0c;核心技术 有过总结。核心技术问题采用对应…

HTTP.sys远程代码执行

本文转载与&#xff1a;https://blog.csdn.net/weixin_47723270/article/details/129472716 01 漏洞描述 HTTP.sys是Microsoft Windows处理HTTP请求的内核驱动程序&#xff0c;为了优化IIS服务器性能&#xff0c;从IIS6.0引入&#xff0c;IIS服务进程依赖HTTP.sys。HTTP.sys远程…

keycloak异常关闭报错username ‘admin‘ already added时卡死无法重启的问题处理

问题现象 使用docker部署keycloak服务&#xff0c;使用docker-compose进行配置管理&#xff0c;配置如下&#xff1a; keycloak:image: jboss/keycloak:16.1.0 container_name: keycloakcommand:[-b,0.0.0.0,-Dkeycloak.migration.actionimport,-Dkeycloak.migration.provider…

UE5中如何新建C++类?

UE5 插件开发指南 前言0.如何在UE编辑器内创建C++类?1.如何在UE编辑器外创建C++类?前言 这个问题应该细分成两个问题: (1)如何在编辑器内创建C++类? (2)如何在编辑器外创建C++类? 问题(1)主要针对那些可以在编辑器内继承并创建的类,然而有些内是无法在编辑内继承的,必须在…

overflow属性的常用值详解

什么是overflow 在CSS中&#xff0c;overflow是“溢出”的意思&#xff0c;该属性规定当内容溢出元素框时发生的事情&#xff0c;设置内容是否会被修剪&#xff0c;溢出部分是否会被隐藏&#xff1b;例如当属性值设置为“visible”则内容不会被修剪&#xff0c;为“hidden”则内…

软件测试用例包括_白盒测试用例

测试用例分层 每个测试用例都有1个或多个测试步骤&#xff08;List[step]&#xff09;&#xff0c;每个测试步骤对应一个API请求或其他用例的引用。 从上图分析&#xff0c;我们可以看到testsuite中包含了3个测试用例&#xff0c;testcase1中有4个请求和一个步骤teststep12&am…

LeetCode:25. K 个一组翻转链表

25. K 个一组翻转链表 1&#xff09;题目2&#xff09;思路3&#xff09;代码4&#xff09;结果 1&#xff09;题目 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。…

研发工程师玩转Kubernetes——通过文件创建Pod

在《研发工程师玩转Kubernetes——部署应用》中&#xff0c;我们使用kubectl run命令启动了一个可以在kubernetes集群内部访问的nginx——它不可以通过物理机访问。而我们使用文件创建时&#xff0c;则可以通过设置相关参数&#xff0c;让nginx可以通过物理机地址访问。 创建P…