【回溯法】-----求一个集合的子集问题

news2024/11/24 9:58:43

leetcode78 subsets

  • leetcode 78 问题原文
    • Example
    • Constraints:
    • 解决思路
    • 回溯法
    • 代码实现

leetcode 78 问题原文

Given an integer array nums of unique elements, return all possible
subsets (the power set).

The solution set must not contain duplicate subsets. Return the solution in any order.

Example

Example1
Input: nums = [1,2,3]
Output: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
Input: nums = [0]
Output: [[],[0]]

Constraints:

  • 1 <= nums.length <= 10

  • 1 <= nums.length <= 10

  • All the numbers of nums are unique.

解决思路

首先这个问题,是一个求子集的问题,求子集问题可以联想到组合问题和分割问题,如果把求解后两个问题的遍历过程形式化为树,我们可以认为组合问题和分割问题是求整棵树的叶子节点的过程。子集问题也可以认为是组合问题和分割问题,但是在求得整棵数的叶子节点之后,在求集合的并集时,需要去掉重复的子集,这个过程时间复杂度有点高,可以规避。
本题给出的nums里面的元素是唯一的,为了避免节点重复被选取,在取节点的时候,每次都不能取之前已经使用过的节点,如下图所示的取节点方法:
tree
按照此方法取出的节点,最终得到的集合中的子集是不会重复的。

回溯法

回溯法一般分为三个步骤:

  1. 确定回溯过程中子方法的参数和返回值
  2. 确定子方法中的结束条件
  3. 确定子方法中进入回溯的逻辑

代码实现

#include <vector>
#include <algorithm>

using namespace std;

class leetcode78new {
public:
    vector<vector<int>> vecRes;
    vector<vector<int>> subsets(vector<int> &nums) {
        sort(nums.begin(), nums.end());
        vecRes.push_back({});
        vector<int> vec;
        innerSubsets(nums, 0, vec);
        return vecRes;
    }

    void innerSubsets(vector<int> &nums, int startIndex, vector<int> vec) {
        if(startIndex == nums.size()) {
            return;
        }
        for(int i = startIndex; i < nums.size(); ++i) {
            vec.push_back(nums[i]);
            vecRes.push_back(vec);
            innerSubsets(nums, i+1, vec);
            vec.pop_back();
        }
    }
};

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

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

相关文章

银行数仓分层架构

一、为什么要对数仓分层 实现好分层架构&#xff0c;有以下好处&#xff1a; 1清晰数据结构&#xff1a; 每一个数据分层都有对应的作用域&#xff0c;在使用数据的时候能更方便的定位和理解。 2数据血缘追踪&#xff1a; 提供给业务人员或下游系统的数据服务时都是目标数据&…

WebTest搭建

0.前言 此框架为真实项目实战&#xff0c;所以有些数据不便展示&#xff0c;只展示架构和思想 工具&#xff1a;pythonseleniumddtunittest 1.架构说明 2.代码封装 Commom层 base_page.py #__author__19044168 #date2021/8/26 import logging import datetime from sele…

【数据分析之道-NumPy(六)】数组操作

文章目录专栏导读1、修改数组形状reshape()resize()flatten()ravel()2、翻转数组transpose()flip()fliplr()flipud()3、修改数组维度newaxis()squeeze()4、连接数组concatenate()stack()hstack()、vstack()5、分割数组split()hsplit()vsplit()array_split()6、数组元素的添加和…

2023学习软件测试,如何月薪过万?这几条必须具备

软件测试&#xff0c;如何月薪过万&#xff1f; 这个问题换做前几年的功能测试或许还有点小难。但如今以点点点为主的功能测试&#xff0c;即将被淘汰&#xff0c;适者生存的法则下&#xff0c;自动化测试如雨后春笋登上舞台。 同一时间&#xff0c;随着各大互联网公司迅速扩…

Carla仿真二:Carla多视图切换代码详解

文章目录前言一、Carla多视图切换效果二、Camera安装坐标系1、Carla.Location2、Carla.Rotation三、接口及代码详解1、接口介绍2、生成上帝视图代码3、生成Camera视图代码四、完整代码前言 1、Carla提供了大量的Python API接口&#xff0c;用户可以通过查找文档实现各类功能&a…

【前缀和】

目录知识框架No.0 筑基No.1 普通前缀和题目来源&#xff1a;牛客网-NC14556&#xff1a;数圈圈题目来源&#xff1a;牛客网-NC14600&#xff1a;珂朵莉与宇宙题目来源&#xff1a;牛客网-NC21195 &#xff1a;Kuangyeye and hamburgers题目来源&#xff1a;牛客网-NC19798&…

混合开发中h5前端离线打包规范流程

1、离线化的目的 首先在H5Native的混合开发实战中&#xff0c;让人头疼最多的恐怕就是网页加载过程中的白屏了&#xff0c;以及弱网、断网状态下h5页面无法正常加载的问题&#xff0c;那么为了解决这些问题&#xff0c;我们H5端跟原生端共同讨论采用Hybrid App离线加载方案&…

fiddler(抓包)的用法和HTTP 协议的基本格式

目录 fiddler(抓包)用法&#xff1a; HTTP 协议的基本格式 HTTP请求&#xff1a; 首行 认识HTTP方法 GET和POST的典型区别&#xff1a; 认识请求“报头”&#xff08;header&#xff09; HTTP 响应 HTTP状态码&#xff1a; 状态码的分类&#xff1a; 认识响应 …

SD-WAN基本介绍

一、SD-WAN是什么&#xff1f;它能为我们带来什么&#xff1f; SD-WAN&#xff0c;即软件定义广域网络&#xff0c;是将SDN技术应用到广域网场景中所形成的一种服务。这种服务用于连接广阔地理范围的企业网络、数据中心、互联网应用及云服务&#xff0c;旨在帮助用户降低广域网…

STL——array和vector容器

&#x1f4d6;作者介绍&#xff1a;22级树莓人&#xff08;计算机专业&#xff09;&#xff0c;热爱编程&#xff1c;目前在c&#xff0b;&#xff0b;阶段>——目标Windows&#xff0c;MySQL&#xff0c;Qt&#xff0c;数据结构与算法&#xff0c;Linux&#xff0c;多线程&…

解密HTTP协议:探索其组成部分与工作原理

前言 欢迎来到今天的每日一题&#xff0c;每日一提。昨天有聊到&#xff0c;HTTP 和 HTTPS 之间有什么区别&#xff1f;面试官基本秉承着刨根问题的原则&#xff0c;肯定是不会轻易放过我们的&#xff0c;那么自然是要继续拷问了。所以我们今天就聊聊什么是 HTTP&#xff0c;它…

微服务分布式搜索引擎 Elastic Search RestClient 操作文档

文章目录⛄引言一、初始化 Java RestClient二、RestClient 对文档的CRUD操作⛅新增文档⏰查询文档⚡修改文档⌚删除文档三、RestClient 批量文档导入⛵小结⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能…

SpringBoot整合XXL-JOB

XXL-JOB&#xff1a; 官网文档地址&#xff1a;分布式任务调度平台XXL-JOB GitHub地址&#xff1a;https://github.com/xuxueli/xxl-job Gitee地址&#xff1a;https://gitee.com/xuxueli0323/xxl-job 拉取代码&#xff0c;首先执行一下doc/db下的sql文件 tables_xxl_job.sq…

JAVA识别电子发票问题汇总

之前写的java解析电子发票&#xff0c;上线后出现了一下线上的问题&#xff0c;无法解析发票&#xff0c;对问题做个规整&#xff0c;仅供参考&#xff01; 1. Pdfbox介绍 pdfbox是一款Apache的开源工具&#xff0c;可以进行对pdf进行操作&#xff0c;如题&#xff0c;转图片…

UE4C++学习篇(十九)-- 动画蒙太奇初级使用

用一个第三人称的射击案例来简单介绍一下动画蒙太奇的使用&#xff0c;动画蒙太奇的具体介绍这里就不多说了&#xff0c;不知道的小伙伴可以去搜一下了解。 这里介绍角色射击&#xff0c;射击的时候播放一个射击动画。 选中需要创建出动画蒙太奇的动画&#xff0c;点击创建&am…

物理服务器通过U盘安装CentOS 7操作系统

一、制作U盘启动盘 1、使用UltraISO工具打开需要安装的操作系统iso镜像文件&#xff08;我安装的是CentOS-7-x86_64-Minimal-2009.iso&#xff09;&#xff0c;如下图所示 镜像下载地址&#xff1a;centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云 2、将该系统镜像…

nginx--官方模块

目录 1.概述 2.Nginx的客户端状态 1.使用 2.目录中选择一个随机主页 3.http内容替换 ​编辑 4.nginx请求限制 5.nginx访问控制 1.基于Ip的访问控制 1.1使用 1.2access_mod.conf 1.3只允许自己ip访问 1.4http_x_forwarded_for 1.5http_access_module局限性 2.基于…

【用python将文件夹下面的文件夹里面的文件全部提取出来,并且放到一个新的文件夹】

文件里面有多个文件&#xff0c;每个文件下面有很多jpg格式的照片&#xff0c;把所有照片提取出来并且放在一个新的文件夹下面。 可以使用Python的os和shutil库来完成这个任务。 比如说&#xff1a;我的faces95文件夹下面有95个文件&#xff0c;每个文件下面有十七到十八个照片…

深拷贝和浅拷贝

目录 一.Java的Cloneable和clone()方法 1.Object类中的clone() 2.实现Cloneable接口的类 3.通过clone()生成对象的特点 二.深拷贝和浅拷贝 1.浅拷贝 2.深拷贝 3.实现深拷贝的两种方法 1.一种是递归的进行拷贝 2.Json字符串的方式进行深拷贝 一.Java的Cloneable和clone…

No.037<软考>《(高项)备考大全》【第21章】项目组合管理

【第21章】项目组合管理1 考试相关2 项目组合管理2.1 项目组合管理、项目集管理、项目管理异同2.2 项目组合管理过程组3 练习题参考答案1 考试相关 选择1分必考 案例概率低&#xff0c;知识点看一遍即可 2 项目组合管理 1、项目组合是将项目、项目集&#xff0c;以及其他方面…