LeetCode78.子集

这道题如果用暴力法几乎是不可能解出来的,因为情况太复杂了,但是一旦用上递归回溯就会轻松很多,先上代码:
class Solution {List<List<Integer>> result = new ArrayList<List<Integer>>();List<Integer> list = new ArrayList<Integer>();public List<List<Integer>> subsets(int[] nums) {dfs(0,nums);return result;}public void dfs(int cur, int[] nums){if(cur == nums.length){result.add(new ArrayList<Integer>(list));return;}list.add(nums[cur]);dfs(cur+1, nums);list.remove(list.size()-1);dfs(cur+1, nums);}
}
对于数组中每个元素,其无非就两种状态,加入这个数组或者不加入这个数组,所以我们创建一个递归方法dfs(int cur, int[] nums),cur就是我们当前处理的这个元素的下标。
if(cur == nums.length){result.add(new ArrayList<Integer>(list));return;}
如果这个下标等于数组长度,说明数组中的所有元素都判断过了,可以把这个数组放进答案里了,但是我们不能把list放进去,因为这个list是全局的,dfs方法都在动这个list,后面的dfs会修改list,如果是放list,那么result里面就是全部一样的list并且是最后改完的list也就是空的list,因为最后一个递归是所有元素都是不添加的情况。所以这里用的是result.add(new ArrayList<Integer>(list));把list的副本添加进了result,这个副本不是指向list而是一个新的对象通过这个new也可以看出。
添加nums[cur]的情况:
list.add(nums[cur]);
dfs(cur+1, nums);
不添加nums[cur]的情况:
list.remove(list.size()-1);dfs(cur+1, nums);
nums[cur]的情况判断完了,后面dfs(cur+1,nums)判断nums[cur+1]的情况。
还有一种方法是迭代法:
class Solution {List<List<Integer>> result = new ArrayList<List<Integer>>();List<Integer> list = new ArrayList<Integer>();public List<List<Integer>> subsets(int[] nums) {int n = nums.length;for(int mask =0;mask < Math.pow(2,n);++mask){list.clear();for(int i = 0;i<n;i++){if((mask & (1 << i)) != 0){list.add(nums[i]);}}result.add(new ArrayList<Integer>(list));}return result;}
}
就用对于数组中的任一元素用0,1表示它的状态,0表示不在数组中,1表示在数组中。假设数组长度为n,那么每一个n位的的01序列都表示一种情况,一共有2的n次方个序列,分别是0到2的n次方减1,那么我们只需要每一种情况都用一个list放数据就好了,对于每一个list我们需要遍历这n位,如果第i位是1就把nums[i]放进list,0则不放。
那么如何判断第i位是0还是1呢?只需要和一个第i位是1其他位是0的数按位与即可。
比如,10101 & 00100,就是00100,10001 & 00100,就是00000,它是把每一位的分别进行与,与的结果作为最终结果的第i位。所以用1左移i位就会得到一个只有第i位是1其他位是0的数,我们那么与的结果就取决于mask的第i位,如果第i位是0,那么每一位与的结果都是0,最终结果是0;如果第i位是1与的结果就是第i位是1其他位是0的数,这样就可以判断第i位是0还是1了。
相关文章:
LeetCode78.子集
这道题如果用暴力法几乎是不可能解出来的,因为情况太复杂了,但是一旦用上递归回溯就会轻松很多,先上代码: class Solution {List<List<Integer>> result new ArrayList<List<Integer>>();List<Integ…...
不是默认进入Linux|总是自动进入windows系统
问题描述 不是默认进入Linux系统无法主动出现boot引导自动进入windows系统 尝试无效 修复引导无效重装Grub无效重装系统无效 环境 Ubuntu 22.04 LST微星主板 解决方案 修改引导顺序: 开机狂按Del键,进入BIOS系统,左侧Settings 设置&…...
【面经八股】搜广推方向:常见面试题(二)
【面经&八股】搜广推方向:常见面试题(二) 文章目录 【面经&八股】搜广推方向:常见面试题(二)1. FTRL 是什么?(Follow The Regularized Leader)2. 梯度下降方法3. 推荐系统中常见的Embedding方法有哪些?4. Embedding与推荐系统有哪些结合5. FM 和 FFM6. FNN7. 深…...
机器学习与药物筛选的心得体会
机器学习在药物设计里面的应用可以说还是比较常见的,尤其是搞计算的都会或多或少的涉及到这块。比如国内做这块比较多的,浙江大学的侯廷军教授,北京化工大学的闫爱霞教授,华东理工大学的几个做模拟计算的老师,上海药物…...
初识数据结构
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝 熬过了我们不想要的生活…...
【阿里云】图像识别 智能分类识别 增加网络控制功能点(三)
一、增加网络控制功能 实现需求TCP 心跳机制解决Soket异常断开问题 二、Linux内核提供了通过sysctl命令查看和配置TCP KeepAlive参数的方法。 查看当前系统的TCP KeepAlive参数修改TCP KeepAlive参数 三、C语言实现TCP KeepAlive功能 四、setsockopt用于设置套接字选项的系…...
LeetCode 统计美丽子字符串 II【质因子分解,前缀和,哈希表】困难
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
第一百八十一回 如何绘制阴影效果
文章目录 1. 概念介绍2. 使用方法2.1 SegmentedButton2.2 ButtonSegment 3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 1. 概念介绍 我们在本章回中介绍的SegmentedButton组件是一种分段式按钮,它把多个按钮连接成一组显示,组内再对不同的按钮进…...
Qt5.15.2静态编译 VS2017 with static OpenSSL
几年前编译过一次Qt静态库:VS2015编译Qt5.7.0生成支持XP的静态库,再次编译,毫无压力。 一.环境 系统:Windows 10 专业版 64位 编译器:visual studio 2017 第三方工具:perl,ruby和python python用最新的3.x.x版本也是可以的 这三个工具都需要添加到环境变量,安装时勾选…...
AIGC(生成式AI)试用 13 -- 数据时效性
数据时效性? 最新的数据,代表最新的状态,使用最新的数据也应该最有说服力。 学习需要时间,AIGC学习并接收最新数据的效果如何? 问题很简单,如何验证?这个需要找点更新快的对像进行验证。…...
Sass的嵌套CSS 规则详细教程
文章目录 前言父选择器的标识符&群组选择器的嵌套子组合选择器和同层组合选择器:>、和~嵌套属性后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:Sass和Less 🐱👓博主在前端领域还有很多知识和…...
Spark---SparkCore(一)
一、术语与宽窄依赖 1、术语解释 1、Master(standalone):资源管理的主节点(进程) 2、Cluster Manager:在集群上获取资源的外部服务(例如:standalone,Mesos,Yarn) 3、Worker Node(standalone):资源管理的从节点(进程)或者说管理本机资源的…...
单链表原来是这样实现的!
文章目录 前言1. 链表的概念及结构1.1在链表里,每节“车厢”是什么样的呢?1.2为什么还需要指针变量来保存下⼀个节点的位置? 2. 单链表的实现1. 定义结构体(Seqlist)2. 打印函数(SLTPrint)小插曲,创建节点函数CreateNode3. 尾插函…...
excel一个单元格换行方法
要是在同一个单元格内输入文字输入不下的话,我们是可以进行同一个单元格换行设置的,而且换行的方法也是有很多种,下面我们就一起来看一下有哪些方法吧。 excel一个单元格换行方法: 方法一: 1、我们可以直接按下alte…...
echart一键生成迁徙图
echart_move 介绍 echart迁徙图,选择起点和目的地生成迁徙图 软件架构 html echarts js 使用说明 将文件放到同一目录下打开index.html即可 默认是小飞机图标,如果想修改图标,将图片放到同一目录,如1.svg 代码修改为对应位…...
开发、测试、生产环境
开发环境:开发环境是程序猿们专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告。简单讲就是项目尚且处于编码阶段,一般这时候会把代码放在开发环境中,不会放在生产环境中。 …...
红队攻防文库文章集锦
再救你一次,不要让欲望击溃你的意志 0.红队攻防 1.红队实战 红队攻防之特殊场景上线cs和msf CVE-2021-42287&CVE-2021-42278 域内提权 红队攻防之Goby反杀 红队攻防实战之钉钉RCE 红队攻防实战之从边界突破到漫游内网(无cs和msf) 红队攻防实战系列一之C…...
Vue框架学习笔记——键盘事件
文章目录 前文提要键盘事件(并不是所有按键都能绑定键盘事件)常用的按键不同的tab和四个按键keyCode绑定键盘事件(不推荐)Vue.config.keyCode.自定义键名 键码 神奇的猜想div标签和click.enterbutton标签和click.enter 前文提要 …...
Windows安装mysql8.0
官网地址:MySQL :: MySQL Community Downloads 选择相应版本信息下载 默认选择点击下一步 默认配置点击next 设置密码 默认配置...
Linux C++网络编程-王健伟
文章目录 1-1课程详细介绍1-2环境搭建详细介绍2-1nginx简介、选择理由、安装和使用2-2nginx整体结构、进程模型3-1学习nginx源码前的准备工作3-2nginx源码学法,终端和进程的关系说3-3信号的概念、认识、处理动作3-4Unix/Linux体系结构、信号编程初步3-5信号编程进阶…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space
问题:IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案:将编译的堆内存增加一点 位置:设置setting-》构建菜单build-》编译器Complier...
