【Leetcode每日一题】 穷举vs暴搜vs深搜vs回溯vs剪枝_全排列 - 子集(难度⭐⭐)(65)

news2024/10/7 18:23:15

1. 题目解析

题目链接:78. 子集

这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。

2.算法原理

算法思路详解:

为了生成数组 nums 的所有子集,我们需要对数组中的每个元素进行“选择”或“不选择”的操作。由于每个元素都有两种可能的状态(选或不选),因此数组将产生 2^(数组长度) 个不同的子集。为了有效地查找这些子集,我们可以定义一个辅助数组来记录当前的状态,并递归地构建这些子集。

以下是详细的递归函数设计:

void dfs(vector<vector<int>>& res, vector<int>& ans, vector<int>& nums, int step)

参数说明

  • res:用于存储所有子集的二维向量。
  • ans:当前状态下已构建的子集。
  • nums:原始数组。
  • step:当前正在处理的元素在 nums 中的下标。

函数作用
通过递归查找数组 nums 的所有子集,并将它们存储在 res 中。

递归流程

  1. 递归结束条件
    • 当 step 等于 nums 的长度时,说明已经处理完所有元素,此时将当前状态的 ans 添加到 res 中,并返回。
  2. 递归过程
    • 对于当前元素 nums[step],有两种选择:
      • 不选择当前元素:直接递归处理下一个元素,即调用 dfs(res, ans, nums, step + 1)
      • 选择当前元素:将 nums[step] 添加到 ans 的末尾,然后递归处理下一个元素。递归完成后,需要“回溯”,即从 ans 中移除刚刚添加的 nums[step],以便尝试其他可能的组合。
  3. 返回结果
    • 当所有递归调用都完成后,res 中将包含所有可能的子集。

注意事项

  • 回溯是递归算法中重要的概念,它确保了在每次递归调用后,状态能够恢复到调用前的状态,以便进行下一轮的选择。
  • 递归函数没有返回值,因为所有的结果都通过参数 res 来收集和返回。

3.代码编写

class Solution {
    vector<vector<int>> ret;
    vector<int> path;

public:
    vector<vector<int>> subsets(vector<int>& nums) {
        dfs(nums, 0);
        return ret;
    }
    void dfs(vector<int>& nums, int pos) {
        if (pos == nums.size()) {
            ret.push_back(path);
            return;
        }
        // 选
        path.push_back(nums[pos]);
        dfs(nums, pos + 1);
        path.pop_back(); // 恢复现场
        // 不选
        dfs(nums, pos + 1);
    }
};

The Last

嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。

觉得有点收获的话,不妨给我点个吧!

如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~ 

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

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

相关文章

被删除的数字-第12届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第57讲。 被删除的数字&…

Redis底层数据结构之quicklist

目录 一、概述二、quicklist结构三、quicklistNode结构四、优缺点 redis底层数据结构已完结&#x1f44f;&#x1f44f;&#x1f44f;&#xff1a; ☑️redis底层数据结构之SDS☑️redis底层数据结构之ziplist☑️redis底层数据结构之quicklist☑️redis底层数据结构之Dict☑️…

SecuPress Pro 专业级WordPress网站安全防护插件优化版

下载地址&#xff1a;SecuPress Pro 专业版.zip SecuPress Pro&#xff1a;专业的WordPress安全解决方案 如果您没有时间进行每周扫描&#xff0c;SecuPress Pro将是您的理想选择。SecuPress Pro提供了所有SecuPress Free的功能&#xff0c;同时还增加了一些高级选项&#xff…

SpringBoot War打包部署

修改打包方式 <packaging>war</packaging>修改 Servlet 容器的 scope <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></d…

一分钟掌握苹果语音备忘录怎么导出的3个方法!

苹果设备自带的语音备忘录功能&#xff0c;让我们能够随时随地记录生活中的点滴声音&#xff0c;无论是会议内容、学习笔记还是灵感闪现&#xff0c;都能轻松捕捉。然而&#xff0c;有时我们可能需要将这些语音文件导出到其他设备或平台&#xff0c;以便更好地整理、分享或备份…

API提取IP

API代理作为IP代理的一项重要业务&#xff0c;在绕开地域网络限制&#xff0c;提高作业效率等方面提供强大的技术支持。它能够帮助用户快速实现软件与软件间的交流&#xff0c;无障碍连通不同应用程序逻辑开发的系统应用。API代理用途范围广泛&#xff0c;如使用API提取代理IP、…

xinput1 3.dll丢失怎么办?详细解析靠谱的xinput1 3.dll修复方法

当电脑出现提示&#xff0c;显示 ​xinput1_3.dll​文件缺失时&#xff0c;这实际上是一种常见的DLL文件遗失错误&#xff0c;其修复过程通常相对简单。今天&#xff0c;我们将探讨四种不同的方法来解决 ​xinput1_3.dll​缺失的问题。 一.xinput1_3.dll文件解析 xinput1_3.d…

RabbitMQ的幂等性、优先级队列和惰性队列

文章目录 前言一、幂等性1、概念2、消息重复消费3、解决思路4、消费端的幂等性保障5、唯一 ID指纹码机制6、Redis 原子性 二、优先级队列1、使用场景2、如何添加3、实战 三、惰性队列1、使用场景2、两种模式3、内存开销对比 总结 前言 一、幂等性 1、概念 2、消息重复消费 3、…

金职在线 央企国企 跟私企都有哪些区别

一、性质不同 央企国企是国家的全资子公司&#xff0c;属于国有企业。私企就是由自然人投资设立或由自然人控股&#xff0c;以雇佣劳动为基础的营利性经济组织。 二、管理不同 央企国企有完整的审批程序和监管机制&#xff0c;而私企的决策相对简单。国企是政府管理的&#…

李彦宏:程序员将不复存在! 周鸿祎回怼!网友:先把百度程序员都开除了!

近日&#xff0c;百度创始人、董事长兼首席执行官李彦宏在央视《对话》•开年说的访谈中指出&#xff1a;“基本上说以后其实不会存在“程序员”这种职业了&#xff0c;因为只要会说话&#xff0c;人人都会具备程序员的能力”。 “未来的编程语言只会剩下两种&#xff0c;一种…

.net EntityFramework EF

创建EF 方法1 方法二 安装的 版本是 中间没有弹出让选框架的界面&#xff0c; EF三种开发方式 1》》 db first 先设计数据库→然后在代码通过EF与数据库建立映射关系&#xff0c;是EF最早的一种使用方式,使用广泛.以数据库为驱动&#xff0c;生成实体模型&#xff0c;从而驱…

------分割线之 WebSecurityConfigrerAdapter弃用问题------

WebSecurityConfigurerAdapter 被弃用的原因是 Spring Security 项目的维护者希望将项目的主要开发工作集中在新的配置方式上&#xff0c;即基于 Java 的配置&#xff08;Java Configuration&#xff09;和基于 Lambda 的表达式。这主要是因为 Spring 5.0 引入了重量级的 Java …

k8s pod 无法启动一直ContainerCreating

情况如下&#xff0c;更新 pod 时&#xff0c;一直在ContainerCreating 查看详细信息如下 Failed to create pod sandbox: rpc error: code Unknown desc [failed to set up sandbox container “334d991a478b9640c66c67b46305122d7f0eefc98b2b4e671301f1981d9b9bc6” networ…

精益思想赋能数字化转型:落地策略与实践路径

当下&#xff0c;数字化转型已不再是选择题&#xff0c;而是关乎企业生存与发展的必答题。然而&#xff0c;转型过程中如何确保效率、降低成本并快速实现价值创造&#xff0c;成为了摆在众多企业面前的难题。精益思想作为一种追求精益求精、持续改进的管理思维&#xff0c;为数…

一般神经网络的微分与网络参数的初始化

(文章的主要内容来自电科的顾亦奇老师的 Mathematical Foundation of Deep Learning, 有部分个人理解) 一般深度神经网络的微分 上周讨论的前向和反向传播算法可以推广到任意深度神经网络的微分。 对于一般的网络来说&#xff0c;可能无法逐层分割&#xff0c;但仍然可以用流…

顺序表经典算法:头脑风暴来袭

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;http://t.csdnimg.cn/XSLtz&#xff08;经典算法题&#xff09; 小新的主页&#xff1a;编程版小新-CSDN博客 前言…

利用Landsat遥感卫星数据反演地表温度的方法与应用

随着遥感技术的快速发展&#xff0c;Landsat系列卫星数据成为了地表温度监测和研究的重要数据源之一。本文将介绍如何利用Landsat数据反演地表温度的方法以及在环境监测、气候变化、水文循环和农业生产等领域的应用。 1. Landsat数据概述 Landsat卫星是美国国家航空航天局&…

NVM和NodeJS安装教程

NVM和NodeJS安装教程 NVM和NodeJS安装教程 NVM和NodeJS安装教程一、下载 NVM二、安装 NVM三、安装 NodeJS1. 安装指令2. 查看下载的所有node版本3. 使用版本4. 检查是否安装成功 四、配置 NVM 和 NodeJS1. 配置环境变量2. 配置node_global和node_cache 用的 NVM 下载&#xff0…

学习随手记ComboBoxEx选定项的值value和text值获取方法

代码&#xff1a;dotNetBar2中的ComboxBoxEx的使用方法 //获取选定项的value值 string _v ((DevComponents.Editors.ComboItem)cbo_cmdType.SelectedItem).Value.ToString(); //获取选定项的text值 string _t ((DevComponents.Editors.ComboItem)cbo_cmdType.SelectedItem)…

论文解读:(CAVPT)Dual Modality Prompt Tuning for Vision-Language Pre-Trained Model

v1文章名字&#xff1a;Dual Modality Prompt Tuning for Vision-Language Pre-Trained Model v2文章名字&#xff1a;Class-Aware Visual Prompt Tuning for Vision-Language Pre-Trained Model 文章汇总 对该文的改进&#xff1a;论文解读&#xff1a;(VPT)Visual Prompt …