当前位置: 首页 > news >正文

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.子集

这道题如果用暴力法几乎是不可能解出来的&#xff0c;因为情况太复杂了&#xff0c;但是一旦用上递归回溯就会轻松很多&#xff0c;先上代码&#xff1a; class Solution {List<List<Integer>> result new ArrayList<List<Integer>>();List<Integ…...

不是默认进入Linux|总是自动进入windows系统

问题描述 不是默认进入Linux系统无法主动出现boot引导自动进入windows系统 尝试无效 修复引导无效重装Grub无效重装系统无效 环境 Ubuntu 22.04 LST微星主板 解决方案 修改引导顺序&#xff1a; 开机狂按Del键&#xff0c;进入BIOS系统&#xff0c;左侧Settings 设置&…...

【面经八股】搜广推方向:常见面试题(二)

【面经&八股】搜广推方向:常见面试题(二) 文章目录 【面经&八股】搜广推方向:常见面试题(二)1. FTRL 是什么?(Follow The Regularized Leader)2. 梯度下降方法3. 推荐系统中常见的Embedding方法有哪些?4. Embedding与推荐系统有哪些结合5. FM 和 FFM6. FNN7. 深…...

机器学习与药物筛选的心得体会

机器学习在药物设计里面的应用可以说还是比较常见的&#xff0c;尤其是搞计算的都会或多或少的涉及到这块。比如国内做这块比较多的&#xff0c;浙江大学的侯廷军教授&#xff0c;北京化工大学的闫爱霞教授&#xff0c;华东理工大学的几个做模拟计算的老师&#xff0c;上海药物…...

初识数据结构

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 熬过了我们不想要的生活&#xf…...

【阿里云】图像识别 智能分类识别 增加网络控制功能点(三)

一、增加网络控制功能 实现需求TCP 心跳机制解决Soket异常断开问题 二、Linux内核提供了通过sysctl命令查看和配置TCP KeepAlive参数的方法。 查看当前系统的TCP KeepAlive参数修改TCP KeepAlive参数 三、C语言实现TCP KeepAlive功能 四、setsockopt用于设置套接字选项的系…...

LeetCode 统计美丽子字符串 II【质因子分解,前缀和,哈希表】困难

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

第一百八十一回 如何绘制阴影效果

文章目录 1. 概念介绍2. 使用方法2.1 SegmentedButton2.2 ButtonSegment 3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 1. 概念介绍 我们在本章回中介绍的SegmentedButton组件是一种分段式按钮&#xff0c;它把多个按钮连接成一组显示&#xff0c;组内再对不同的按钮进…...

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 -- 数据时效性

数据时效性&#xff1f; 最新的数据&#xff0c;代表最新的状态&#xff0c;使用最新的数据也应该最有说服力。 学习需要时间&#xff0c;AIGC学习并接收最新数据的效果如何&#xff1f; 问题很简单&#xff0c;如何验证&#xff1f;这个需要找点更新快的对像进行验证。…...

Sass的嵌套CSS 规则详细教程

文章目录 前言父选择器的标识符&群组选择器的嵌套子组合选择器和同层组合选择器&#xff1a;>、和~嵌套属性后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Sass和Less &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和…...

Spark---SparkCore(一)

一、术语与宽窄依赖 1、术语解释 1、Master(standalone):资源管理的主节点&#xff08;进程&#xff09; 2、Cluster Manager:在集群上获取资源的外部服务(例如&#xff1a;standalone,Mesos,Yarn) 3、Worker Node(standalone):资源管理的从节点(进程)或者说管理本机资源的…...

单链表原来是这样实现的!

文章目录 前言1. 链表的概念及结构1.1在链表里&#xff0c;每节“车厢”是什么样的呢&#xff1f;1.2为什么还需要指针变量来保存下⼀个节点的位置&#xff1f; 2. 单链表的实现1. 定义结构体(Seqlist)2. 打印函数(SLTPrint)小插曲&#xff0c;创建节点函数CreateNode3. 尾插函…...

excel一个单元格换行方法

要是在同一个单元格内输入文字输入不下的话&#xff0c;我们是可以进行同一个单元格换行设置的&#xff0c;而且换行的方法也是有很多种&#xff0c;下面我们就一起来看一下有哪些方法吧。 excel一个单元格换行方法&#xff1a; 方法一&#xff1a; 1、我们可以直接按下alte…...

echart一键生成迁徙图

echart_move 介绍 echart迁徙图&#xff0c;选择起点和目的地生成迁徙图 软件架构 html echarts js 使用说明 将文件放到同一目录下打开index.html即可 默认是小飞机图标&#xff0c;如果想修改图标&#xff0c;将图片放到同一目录&#xff0c;如1.svg 代码修改为对应位…...

开发、测试、生产环境

开发环境&#xff1a;开发环境是程序猿们专门用于开发的服务器&#xff0c;配置可以比较随意&#xff0c; 为了开发调试方便&#xff0c;一般打开全部错误报告。简单讲就是项目尚且处于编码阶段&#xff0c;一般这时候会把代码放在开发环境中&#xff0c;不会放在生产环境中。 …...

红队攻防文库文章集锦

再救你一次&#xff0c;不要让欲望击溃你的意志 0.红队攻防 1.红队实战 红队攻防之特殊场景上线cs和msf CVE-2021-42287&CVE-2021-42278 域内提权 红队攻防之Goby反杀 红队攻防实战之钉钉RCE 红队攻防实战之从边界突破到漫游内网(无cs和msf) 红队攻防实战系列一之C…...

Vue框架学习笔记——键盘事件

文章目录 前文提要键盘事件&#xff08;并不是所有按键都能绑定键盘事件&#xff09;常用的按键不同的tab和四个按键keyCode绑定键盘事件&#xff08;不推荐&#xff09;Vue.config.keyCode.自定义键名 键码 神奇的猜想div标签和click.enterbutton标签和click.enter 前文提要 …...

Windows安装mysql8.0

官网地址&#xff1a;MySQL :: MySQL Community Downloads 选择相应版本信息下载 默认选择点击下一步 默认配置点击next 设置密码 默认配置...

Linux C++网络编程-王健伟

文章目录 1-1课程详细介绍1-2环境搭建详细介绍2-1nginx简介、选择理由、安装和使用2-2nginx整体结构、进程模型3-1学习nginx源码前的准备工作3-2nginx源码学法&#xff0c;终端和进程的关系说3-3信号的概念、认识、处理动作3-4Unix/Linux体系结构、信号编程初步3-5信号编程进阶…...

终极指南:如何用Bloxstrap重新定义你的Roblox游戏启动体验

终极指南&#xff1a;如何用Bloxstrap重新定义你的Roblox游戏启动体验 【免费下载链接】bloxstrap An alternative bootstrapper for Roblox with a bunch of extra features. 项目地址: https://gitcode.com/GitHub_Trending/bl/bloxstrap Bloxstrap是一款功能强大的第…...

【实盘】20260409 :+3.42% 对资管而言,曲线就是生命线!

一、20260409 - 平仓净值曲线 01 CTA投资组合团队自营CTA&#xff08;Commodity Trading Advisor&#xff09;多品种全天候自动化策略&#xff0c;是一类基于截面双动量因子的量化模型、覆盖全交易时段、跨多品种期货合约的自动化交易策略&#xff0c;核心目标是通过捕捉不同品…...

作者介绍Java高级工程师

作者介绍Java高级工程师 廖万忠 编程比赛成绩 2023年CSDN基础用户1million Java开发者用户30万332个团长比赛成绩 102 rank美国创业公司 HackerRank 项目组 Java工程师 2022年 accepted深圳腾讯公司 腾讯云开发者社区 2022年年度进取作者 coderlwz 证书北京大学2010级计算机优秀…...

NR随机接入之MSG3:从信令解析到资源调度的关键一步

1. MSG3在NR随机接入中的核心作用 当你用手机刷视频时&#xff0c;有没有想过这个简单的动作背后&#xff0c;其实经历了一场精密的"握手仪式"&#xff1f;MSG3就是这个仪式中最关键的那句"自我介绍"。作为5G NR随机接入流程的第三步骤&#xff0c;它承担着…...

全自动铺布机选购指南:核心指标与品牌实力评估

投资一台全自动铺布机是企业的重要决策。如何在海量品牌中做出最优选择&#xff1f;关键在于穿透营销宣传&#xff0c;从“硬指标”和“软实力”两个维度进行综合评估。核心性能指标张力控制精度&#xff1a;这是衡量铺布机性能的核心指标。直接决定能否处理针织、弹力、真丝等…...

VL53L0X ToF测距模块Arduino驱动库详解

1. 项目概述Deneyap Derinlik ler&#xff0c;即 Deneyap ToF Range Finder Sensor&#xff0c;是一款基于 STMicroelectronics VL53L0X 飞行时间&#xff08;Time-of-Flight, ToF&#xff09;测距传感器的国产化 Arduino 兼容模块。该模块由土耳其 Deneyap 教育平台推出&#…...

PCA9505/06工业级I²C IO扩展驱动设计与实战

1. PCA9505/06 库概述&#xff1a;面向工业级IC端口扩展的底层驱动设计PCA9505与PCA9506是NXP推出的40位IC总线IO扩展器&#xff0c;专为资源受限但需高密度数字信号管理的嵌入式系统设计。该库并非简单封装Arduino Wire接口的轻量级适配层&#xff0c;而是一套具备完整寄存器映…...

计算机毕业设计:Python天气大数据爬虫可视化系统 Django框架 线性回归 数据分析 大数据 机器学习 大模型 气象数据(建议收藏)✅

1、项目介绍 技术栈 采用 Python 语言开发&#xff0c;基于 Django 框架搭建 Web 应用程序&#xff0c;使用 MySQL 数据库进行数据存储&#xff0c;前端结合 Bootstrap 框架、CSS、JavaScript 和 HTML 构建界面&#xff0c;运用机器学习中的线性回归算法构建天气预测模型&#…...

计算机组成原理视角:深度估计模型推理的硬件加速优化

计算机组成原理视角&#xff1a;深度估计模型推理的硬件加速优化 最近在项目里用到了Lingbot-Depth-Pretrain-ViTL-14这个深度估计模型&#xff0c;效果确实不错&#xff0c;但跑起来总觉得有点“慢”。不是模型本身的问题&#xff0c;而是感觉硬件资源没被“喂饱”。这让我想…...

Steam DLC解锁工具终极指南:5分钟快速上手SmokeAPI游戏DLC模拟器

Steam DLC解锁工具终极指南&#xff1a;5分钟快速上手SmokeAPI游戏DLC模拟器 【免费下载链接】SmokeAPI Legit DLC Unlocker for Steamworks 项目地址: https://gitcode.com/gh_mirrors/smo/SmokeAPI 想要体验心仪游戏的所有DLC内容却受限于预算&#xff1f;作为开发者需…...