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

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.mzph.cn/bicheng/3620.shtml

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

相关文章

JavaScript-Vue入门

本文主要测分享Vue的一些基础 Vue简介 Vue.js 是一个构建数据驱动的 web 界面的渐进式框架。它的主要目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 下是一些 Vue 的主要特点和概念&#xff1a; 1. 响应式数据绑定&#xff1a;Vue 使用基于 HTML 的模板语法…

Visual Studio安装MFC开发组件

MFC由于比较古老了&#xff0c;Visual Studio默认没有这个开发组件。最近由于一些原因&#xff0c;需要使用这个库&#xff0c;这就需要另外安装。 参考了网上的一些资料&#xff0c;根据实际使用&#xff0c;其实很多步骤不是必须的。 https://zhuanlan.zhihu.com/p/68117276…

Neo-reGeorg(webshell代理)-php

https://github.com/L-codes/Neo-reGeorg python加载需要的库 pip install requests 生成webshell代理文件 python .\neoreg.py generate -k 123456 其中&#xff0c;123456为密码&#xff0c;可以修改 生成后的文件路径&#xff1a; > neoreg_servers/tunnel.ashx …

alert() 函数功能

基本的 alert() 函数用法&#xff1a; 最基本的用法是通过 alert() 函数显示一条简单的文本消息&#xff0c;如下所示&#xff1a; alert("Hello, World!");这将在浏览器中显示一个消息框&#xff0c;其中包含文本 “Hello, World!”。 显示变量的值&#xff1a; a…

Java后台开发的前置说明

1.知识点逻辑 一个部分 都是先挑重点知识点讲解 然后根据这些重点知识点去完成一个项目的开发 然后在到返回来解决这个部分其他细枝末节的知识点 2.软件开发的分工 我们大致可以将软件开发分成四块&#xff1a; 1.前端开发(比如开发电脑中的京东 htmlcssjavascript) 2.移动开…

若依框架学习-springboot-gateway笔记

版本&#xff1a;若依框架微服务版本 学习内容&#xff1a;springboot-gateway 熔断降级踩坑 文档上使用的hystrix在springcloud3.1.8不再支持&#xff0c;建议改为使用CircuitBreaker&#xff0c;使用方式和hystrix几乎无差别&#xff0c;只是需要修改pom引用&#xff1a; …

什么是主数据管理?合理管理主数据,奠定企业数据战略基石

主数据&#xff08;Master Data&#xff09;是指在企业多个业务系统中重复使用、共享的、具有高价值的核心业务实体数据&#xff0c;如客户、产品、供应商、员工等&#xff0c;它们是企业运营和决策的基础&#xff0c;需要保持高度的准确性、一致性和完整性&#xff0c;以确保业…

Scala 05 —— 函数式编程底层逻辑

Scala 05 —— 函数式编程底层逻辑 该文章来自2023/1/14的清华大学交叉信息学院助理教授——袁洋演讲。 文章目录 Scala 05 —— 函数式编程底层逻辑函数式编程假如...副作用是必须的&#xff1f;函数的定义函数是数据的函数&#xff0c;不是数字的函数如何把业务逻辑做成纯函…

什么是 DNS?DNS设定时常见的问题都有哪些?

DNS&#xff08;Domain Name System&#xff09;即域名系统&#xff0c;它是互联网的一项服务。 它主要的作用是将域名转换为对应的 IP 地址&#xff0c;以便计算机能够识别和访问互联网上的各种资源。当我们在浏览器中输入域名时&#xff0c;DNS 会帮助我们找到与之对应的服务…

分布式与微服务区别?

1、概念角度&#xff1a; 分布式&#xff1a;把多个应用部署到多台服务器&#xff08;云&#xff09;上&#xff0c;多个应用之间相互协作&#xff0c;提高系统的扩展性和稳定性。 微服务&#xff1a;是分布式的一种实现方式。 2、粒度划分&#xff1a; 分布式&#x…

贪吃蛇详解

Win32 API介绍&#xff1a; 在写贪吃蛇这款游戏时需要用到一些有关Win32 API的知识&#xff0c; 接下来我会将设计到的知识点列举并讲解&#xff1a; 首先我们先了解一下Win32 API是什么&#xff0c;Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外&am…

普乐蛙VR航天航空体验馆VR双人旋转座椅元宇宙VR飞船

多长假来袭&#xff01;&#xff01;想为门店寻找更多新鲜有趣的吸粉体验&#xff1f;想丰富景区体验&#xff1f;别着急&#xff0c;小编为你准备了一款爆款设备——时光穿梭机&#xff0c;720无死角旋转&#xff01;&#xff01;吸睛、刺激体验&#xff0c;将亲子、闺蜜、情侣…

Java对象不再使用时,为什么要赋值为 null

相信大家在面试Java开发的时候,会遇到比较多的问题是Java的内存管理,这里面涉及到Java垃圾回收机制,以及JVM调优等等,那么今天跟大家讨论一个问题:Java对象不再使用时,为什么要赋值为 null ? 1、Java内存管理 在Java中,对象是在堆内存中分配的。 这部分内存用于存储…

数组的排序算法

1.冒泡排序法 原理如下&#xff1a;每次比较数组中相邻的两个数组元素的值&#xff0c;将较小的数排在较大的数前面&#xff0c;可实现数组元素的从小到大排序&#xff1b;每次将较大的数排在较小的数前面&#xff0c;可实现数组元素从大到小排序。 /**每次比较数组相邻的两个…

【Flutter 面试题】 可以嵌套使用 Scaffold 吗?为什么或者为什么不?

【Flutter 面试题】 可以嵌套使用 Scaffold 吗?为什么或者为什么不? 文章目录 写在前面口述回答补充说明写在前面 🙋 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主,51CTO专家博主。2023博客之星TOP153。 👏🏻 正在学 Flutter 的同学,…

科技论文网站:中国科技论文在线

文章目录 1. Intro2. Main3. Cons Evaluation彩蛋&#xff1a;科学素质 这是作者最后一次发 这种类型的宣传 科普文章 1. Intro 中国科技论文在线是经教育部批准&#xff0c;由教育部科技发展中心主办&#xff0c; 利用现代信息技术手段&#xff0c;打破传统出版物的概念&…

Scrapy爬虫框架入门(豆瓣电影Top 250)

文章目录 Scrapy 官网Scrapy 文档GithubScrapy 简介项目结构爬虫实现XPath 教程创建 Scrapy 项目配置用户代理网页 dom 元素 IP 代理池IP代理池作用配置IP代理池申请IP代理池 Scrapy 官网 https://scrapy.org/ Scrapy 文档 https://docs.scrapy.org/en/latest/ Github htt…

在windows上安装MySQL数据库全过程

1.首先在MySQL的官网找到其安装包 在下图中点击MySQL Community(gpl) 找到MySQL Community Server 选择版本进行安装包的下载 2.安装包&#xff08;Windows (x86, 64-bit), MSI Installer&#xff09;安装步骤 继续点击下一步 继续进行下一步&#xff0c;直到出现此界面&#…

电商平台海外营销利器:DSP平台

电商出海进程持续推进&#xff0c;多款电商应用在全球市场中取得亮眼成绩&#xff0c;据SensorTower数据统计&#xff0c;Temu、AliExpress和Shein等多款电商应用成功闯进2023年全球市场电商应用下载量增长榜Top5。电商出海的成功离不开多方面的努力&#xff0c;本文将从海外营…

Vue3+vite优化基础架构(1)--- 使用unplugin-vue-components

Vue3vite优化基础架构&#xff08;1&#xff09;--- 使用unplugin-vue-components 说明安装unplugin-vue-componentsvite.config.js中使用unplugin-vue-components/vite 说明 这里记录下自己在Vue3vite的项目使用unplugin-vue-components/vite来自定义组件自动全局引入svg雪碧…