Java——子集

news2024/9/25 19:25:39

题目链接

leetcode在线oj题——子集

题目描述

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

题目示例

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

输入:nums = [0]
输出:[[],[0]]

题目提示

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • nums 中的所有元素 互不相同

题目思路

给定数组nums中的元素在子集中有两种不同的状态——存在和不存在,因此我们可以使用一个整形数组,整形数组中每一位代表nums中每一个元素的状态,如果是0代表对应的nums中的数不存在,如果是1代表对应的nums中的数存在

例如nums中有1, 2, 3这三个元素,那么我们可以创建一个整形数组arr,arr一共有三个元素,arr[0]对应1,arr[1]对应2,arr[2]对应3

如果arr[0]是0,则组合1中“1”这个元素不存在,根据排列组合原则,我们可以知道一共存在2^(nums.length)个组合,如果有三个元素,那么就有8种组合

在这里插入图片描述
可以看出,这八种不同的组合就对应了我们二进制中的0到7,因此,我们可以通过0-7这几个数字,确定子集中包含的元素

定义一个变量i,for循环i从0开始到2,让1左移i位,判断和组合中的数字中的一位是否都是1,如果都是1,就把对应的元素添加到子集中
在这里插入图片描述
例如我们要添加子集(1,3),那么对应的arr就是101,对应的十进制数字就是5,我们定义一个i,初始是0
1 << i位,左移0位时 & 5 != 0,说明1应该添加在子集中,左移1位时 & 5 == 0,说明2不在子集中,左移2位时 & 5 != 0,说明3应该添加在子集中,最终,把存在1,3这个子集添加到List中

因此,依次将0-7都进行比较,就可以得到含所有子集的集合了

需要注意的是:
我们在比较时使用的是 (1 << i ) & 5 != 0时说明这个数应该存储在子集中,而不是 (1 << i ) & 5 == 1,这是因为如果i不等于0时,所得到的并不是1,而是1后面加(i - 1)个0对应的二进制数
例如(1 << 3)& 5 ,最终得到的结果是4

代码实现

class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        int len = nums.length;
        int n = (int) Math.pow(2,len);
        List<List<Integer>> lists = new ArrayList<>();
        for (int x = 0; x < n; x++) {
            List<Integer> list = new ArrayList<>();
            for (int i = 0; i < len; i++) {
                if(((1 << i) & x) != 0){
                    list.add(nums[len - 1 - i]);
                }
            }
            lists.add(list);
        }
        return lists;
    }
}

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

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

相关文章

MySQL管理

1&#xff1a;MySQL管理1.1&#xff1a;系统数据库Mysql数据库安装完成后&#xff0c;自带了一下四个数据库&#xff0c;具体作用如下&#xff1a; 数据库 含义 mysql 存储MySQL服务器正常运行所需要的各种信息 &#xff08;时区、主从、用 户、权限等&#xff09; information…

性能测试/实战演示 H5 性能分析

W3C标准是浏览器标准&#xff0c;一般浏览器都支持W3C标准&#xff0c;它规定使用者可以通过api查询性能信息&#xff0c;可借用W3C协议完成自动化H5性能测试。 W3C官网&#xff1a;Navigation Timing 使用chrome浏览器对webview进行手工查看&#xff0c;伴随着业务增多&#x…

mysql:索引的数据结构,B树,B+树浅聊

mysql&#xff1a;索引的数据结构 什么是索引&#xff1f; 索引&#xff08;Index&#xff09;是帮助MySQL高效获取数据的数据结构 为什么学索引&#xff1f; 之前应该有概念说&#xff0c;把索引理解为目录&#xff0c;比如通过s就可以查询到s开头的汉子从哪也开始&#xff…

[网鼎杯 2020 青龙组]AreUSerialz

目录 信息收集 代码审计 前提知识 思路分析 绕过检测 方法一 poc payload 方法二 poc payload 信息收集 进入页面给出了源代码如下&#xff0c;是一道PHP的反序列化题目 <?phpinclude("flag.php");highlight_file(__FILE__);class FileHandler {pro…

Linux多线程 线程概念 | 线程VS进程 | 线程控制【万字精讲】

线程 一、线程概念 1. 知识支持及回顾 在我们一开始学习进程的时候。我们总说进程在内部执行时&#xff0c;是OS操作系统调度的基本单位。其实并不严谨&#xff0c;今天&#xff0c;我们要重新完善这个说法——线程在进程内部运行&#xff0c;线程是OS操作系统调度的基本单位…

WorkPlus移动办公平台,助力企业随时随地“指尖办公”

近年来&#xff0c;随着移动互联网的发展&#xff0c;越来越多的人习惯于随时随地通过移动设备完成工作、购物、游戏等。移动办公应用就是基于移动终端的信息化办公应用&#xff0c;利用企微、钉钉、WorkPlus等移动办公平台&#xff0c;实现企业与员工间的随时随地工作、沟通&a…

技术分享 | ClickHouse StarRocks 使用经验分享

作者&#xff1a;许天云 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 一. 大纲 本篇分享下个人在实时数仓方向的一些使用经验&#xff0c;主要包含了ClickHouse 和 StarRocks 这两款目…

ASP.NET MVC解决方案的搭建(.NET Framework)——C#系列(一)

一、新建项目 1、控制器新建 2、Service层新建 3、Business数据层新建 4、Commons公共层新建 5、Models实体层新建 二、调用接口 1、接口建立 Web API 2 控制器新建 2、调用 三、Swagger接口调试配置 1、添加NuGet包 在启动项中添加Swashbuckle NuGet包 2、访问 htt…

Vivado2018.3安装及注册指南-安装包获取

一、vivado 介绍 vivado设计套件 是FPGA 厂商赛灵思&#xff08;Xilinx&#xff09;公司最新的为其产品定制的集成开发环境&#xff0c;支持Block Design、Verilog、VHDL等多种设计输入方式&#xff0c;内嵌综合器以及仿真器&#xff0c;可以完成从设计输入、综合适配、仿真到…

mysql存储过程的基础知识

本文来简单说下存储过程的基础知识 文章目录概述什么是存储过程存储过程的优缺点概述 mysql官网提供的储存过程&#xff1a;https://www.mysqlzh.com/doc/225/499.html 什么是存储过程 简单的说&#xff0c;存储过程是一条或者多条SQL语句的集合&#xff0c;可视为批文件&…

SAP采购中不基于收货的发票校验的价差计算过程实例

年前最后一天上班了&#xff0c;我还在帮财务分析一个价差问题。源于财务用户头天的一个请求&#xff0c;在不基于收货的发票校验中&#xff0c;计算倒不难&#xff0c;难的是梳理数量的逻辑关系。不过总算时间也没白花&#xff0c;记录下来。下次就不算了&#xff0c;能解释清…

理解使用并查集

目录 一.并查集原理 1.概念&#xff1a; 2.性质 3.形式 4. 合并方式 二.并查集实现 1.成员变量 2.构造函数 3.查找根 4.合并集合 5.判断是否在一个集合 6.查看集合数量 三.并查集总代码 前言&#xff1a;理解并查集是为了接下来学习图要用&#xff0c;而会使用并查…

Linux:系统性能监控工具-tsar安装和使用

在上家公司做性能压力测试时就用过tsar&#xff0c;但总结文档留在了内部&#xff0c;正好借着最近工作内容又用上了tsar&#xff0c;总结起来 目录前言tsar介绍总体架构安装tasrtsar配置介绍配置文件定时任务配置日志文件tsar使用tsar实际使用参考查看可用的监控模块列表查看C…

本松新材创业板IPO终止:业绩下滑,客户较集中,周永松为实控人

撰稿|汤汤 来源|贝多财经 近日&#xff0c;深圳证券交易所披露的信息显示&#xff0c;杭州本松新材料技术股份有限公司&#xff08;下称“本松新材”&#xff09;提交了撤回上市申请文件的申请&#xff0c;保荐人财通证券也撤回对该公司的保荐。因此&#xff0c;深交所终止了…

目标检测:YOLOV3技术详解

目标检测&#xff1a;YOLOV3技术详解前言主要改进DarkNet53新的分类器正负样本的匹配损失函数前言 YOLOV3是V2的升级版&#xff0c;也是原作者的绝笔&#xff0c;V3主要还是把当时一些有用的思想融入了进来&#xff0c;没有什么创新型的突破&#xff0c;具体细节我们下面介绍。…

【安卓逆向】Frida入门与常用备忘

【安卓逆向】Frida入门与常用备忘前置知识什么是hook&#xff1f;hook的作用常见的逆向工具Frida使用入门简介与资料参考备忘前置环境配置执行hook常用hook脚本/API前置知识 什么是hook&#xff1f; hook&#xff0c;译为“钩子”&#xff0c;是指将方法/函数勾住&#xff0c;…

2022-CSDN的一年

前言 马上要到兔年的春节&#xff0c;年前最后一个版本顺利上线&#xff0c;闲下来两天&#xff0c;可以对过往一年进行一下总结&#xff0c;说起来这是入职CSDN之后第一次自己将自己所思所想以以博客的形式发布在CSDN网站上&#xff0c;也是比较奇特的体验。语言表达能力不强&…

利用华为路由器配置单臂路由功能,实现多个vlan间通信

单臂路由&#xff0c;是通过一台路由器使不同VLAN之间互通的数据通过路由器进行三层转发。 如果在路由器上为每个 VLAN分配一个单独的路由器物理接口&#xff0c;那么随着VLAN数量的增口&#xff0c;必然需要更多的接口&#xff0c;而路由器能提供的接口数量有限&#xff0c;所…

Kubernetes 基本概念

Kubernetes 是什么 Kubernetes 是一个可移植、可扩展的开源平台。用于管理容器化的工作负载和服务&#xff0c;可促进声明式配 置和自动化。是谷歌保密了十几年的秘密武器Borg的开源版本&#xff0c;谷歌一直通过Borg系统管理着数量庞大 的应用程序集群。由于Kubernetes是基于…

元素排序 Comparable 和 Comparator 有什么区别?

1.字面含义不同 我们先从二者的字面含义来理解它&#xff0c;Comparable 翻译为中文是“比较”的意思&#xff0c;而 Comparator 是“比较器”的意思。Comparable 是以 -able 结尾的&#xff0c;表示它自身具备着某种能力&#xff0c;而 Comparator 是以 -or 结尾&#xff0c;…