LeetCode Python - 78. 子集

news2024/11/19 13:41:17

目录

  • 题目描述
  • 解法
    • 方法一:DFS(回溯)
    • 方法二:二进制枚举
  • 运行结果
    • 方法一
    • 方法二


题目描述

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的
子集
(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

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

示例 2:

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

提示:

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

解法

方法一:DFS(回溯)

我们设计一个函数 dfs(i),表示从数组的第 i 个元素开始搜索所有子集。函数 dfs(i) 的执行逻辑如下:

  • 如果 i=n,表示当前已经搜索结束,将当前得到的子集 t 加入答案数组 ans 中,然后返回;
  • 否则,我们可以选择不选择当前元素,直接执行 dfs(i+1);也可以选择当前元素,即把当前元素 nums[i] 加入子集 t,然后执行 dfs(i+1),注意要在执行 dfs(i+1) 以后再将 nums[i] 从子集 t 中移除(回溯)。

在主函数中,我们调用 dfs(0),即从数组的第一个元素开始搜索所有子集。最后返回答案数组 ans 即可。

时间复杂度 O(n×2 n ),空间复杂度 O(n)。其中 n 为数组的长度。一共有 2 n 个子集,每个子集需要 O(n) 的时间来构造。

class Solution(object):
    def subsets(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        def dfs(i):
            if i == len(nums):
                ans.append(t[:])
                return
            dfs(i + 1)
            t.append(nums[i])
            dfs(i + 1)
            t.pop()

        ans = []
        t = []
        dfs(0)
        return ans

方法二:二进制枚举

我们也可以使用二进制枚举的方法得到所有的子集。

我们可以使用 2 n 个二进制数来表示 n 个元素的所有子集,对于当前二进制数 mask,如果第 i 位为 1,表示选择了第 i 个元素,否则表示不选择第 i 个元素。

时间复杂度 O(n×2 n ),空间复杂度 O(n)。其中 n 为数组的长度。一共有 2 n 个子集,每个子集需要 O(n) 的时间来构造。

class Solution(object):
    def subsets(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        ans = []
        for mask in range(1 << len(nums)):
            t = [x for i, x in enumerate(nums) if mask >> i & 1]
            ans.append(t)
        return ans

运行结果

方法一

在这里插入图片描述

方法二

在这里插入图片描述

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

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

相关文章

视频声音生成字幕 pr生成视频字幕 以及字幕乱码的解决

目录 目录 1、首先把要生成字幕的视频拖入以创建序列 2、点击工具栏的 窗口 选择 文本 3、选择字幕下的 转录序列 4、选择输出的语言&#xff08;主要看视频声音说的是啥语言&#xff09; 5、音轨 选择 音频1​编辑 6、点击转录 7、等待转录文本 8、点击创建说明性字幕按…

智慧交通(代码实现案例)

1.项目简介 目标: 了解智慧交通项目的架构知道智慧交通项目中的模块能够完成智慧交通项目的环境搭建 该项目是智慧交通项目&#xff0c;通过该项目掌握计算机视觉的方法在交通领域的相关应用&#xff0c;包括车道线检测的方法&#xff0c;多目标车辆追踪及流量统计方法&#…

如何快速进行城市内涝模拟?HTWATER软件

原文链接&#xff1a;如何快速进行城市内涝模拟&#xff1f;HTWATER软件https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247599079&idx2&sndc6f3da8b17c5587cf5b7766e7019729&chksmfa820200cdf58b16658983ecfbf2b369bff39813302942d6f7eb7b71428c68da71…

Django 仿博客园练习

数据库搭建 部分功能介绍 【一】注册 &#xff08;1&#xff09;效果显示、简单简介 主要亮点 结合了layui和forms组件默认头像可以随着性别的选择发生改变自定义头像可以实时更新显示forms组件报错信息可以局部刷新显示在对应框体下面 没有直接使用layui的前端验证后端验证…

Vue2 使用mockjs

一、创建项目 vue create mock-demo二、安装 npm install mockjs --save-dev npm install axios --save三、创建mock文件夹 四、修改main.js 五、应用

js选择语句

文章目录 1. if 分支语句1.1. 示例代码1.2. 运行结果 2. if 双分支语句3. if 多分支语句4. switch 语句&#xff08;了解&#xff09;4.1. 注意4.2. case 穿透现象4.3. case 穿透产生的原因 5. switch 语句与选择语句区别别5.1. 语法上的区别5.2. 应用场景上的区别 6. 三元表达…

HCIP—BGP路由发布

R1和R2&#xff0c;R4和R5建立EBGP对等体 R1和R2&#xff08;R4和R5&#xff09;之间属于EBGP对等体&#xff0c;可以使用直连物理接口建立对等体关系&#xff0c;TTL值默认1。由于使用直连物理接口方式建立&#xff0c;刚好一跳到达。 [R1]bgp 100 [R1-bgp]router-i…

燃气官网安全运行监测系统-阀井燃气监测仪-旭华智能

近年来&#xff0c;燃气爆炸事故频发&#xff0c;造成了重大人员伤亡和财产损失。这也再次为我们敲响警钟&#xff0c;燃气是我们日常生活中不可或缺的能源&#xff0c;但其潜在的危险性也是不容小觑。因此在重要节点加装燃气阀井气体监测仪&#xff0c;并将数据上传到系统平台…

【QT+QGIS跨平台编译】之九十四:【QGIS_App跨平台编译】—【错误处理:字符串错误】

文章目录 一、字符串错误二、涉及到的文件一、字符串错误 常量中有换行符错误:(也有const char * 到 LPCWSTR 转换的错误) 需要把对应的文档用记事本打开,另存为 “带有BOM的UTF-8” 二、涉及到的文件 涉及到的文件有: src\app\qgisapp.cpp src\app\qgsprojectpropert…

JetBrains全家桶激活,分享 DataGrip 2024 激活的方案

大家好&#xff0c;欢迎来到金榜探云手&#xff01; DataGrip 公司简介 JetBrains 是一家专注于开发工具的软件公司&#xff0c;总部位于捷克。他们以提供强大的集成开发环境&#xff08;IDE&#xff09;而闻名&#xff0c;如 IntelliJ IDEA、PyCharm、和 WebStorm等。这些工…

金融投贷通--接口测试分析、设计与实现

金融投贷通--接口测试分析、设计与实现 接⼝相关理论ui功能测试和接⼝测试那个先执⾏ui功能测试与接⼝测试的区别ui功能测试和接⼝测试那个更⾼效 投资业务接⼝接口测试流程如何测试分析api文档项目难点 测试点提取注册图⽚验证码、注册验证码注册登录测试点开通登录测试点开通…

API成网络攻击常见载体,如何确保API安全?

根据Imperva发布的《2024年API安全状况报告》&#xff0c;API成为网络攻击者的常见载体&#xff0c;这是因为大部分互联网流量&#xff08;71%&#xff09;都是API调用&#xff0c;API是访问敏感数据的直接途径。根据安全公司Fastly的一项调查显示&#xff0c;95%的企业在过去1…

蓝桥杯刷题-子串简写

子串简写 代码 kint(input()) s,c1,c2input().split() pre[0]*len(s) ans0 for i in range(len(s)):pre[i]pre[i-1]if c1s[i]:pre[i]1elif c2s[i] and i1-k>0:anspre[i-k1] print(ans)

宾大率先推出藤校首个AI专业!25Fall即可申请!

随着人工智能技术的不断发展&#xff0c;当今社会对AI的需求已呈现出日益多样化的趋势。由ChatGPT、Midjourney等AI应用领衔&#xff0c;生成式的人工智能迅速崛起。各个领域都开始意识到AI的潜在应用价值&#xff0c;该领域的人才需求量也越来越大。在这样的人工智能热潮下&am…

【办公类-21-10】三级育婴师 视频转文字docx(等线小五单倍行距),批量改成“宋体小四、1.5倍行距、蓝色字体、去掉五分钟”

作品展示 背景需求 今天将最后3个育婴师操作视频做整理 第1步&#xff1a;视频MP4转MP3 【办公类-40-01】20240311 用Python将MP4转MP3提取音频 &#xff08;家长会系列一&#xff09;-CSDN博客文章浏览阅读393次&#xff0c;点赞9次&#xff0c;收藏6次。【办公类-40-01】20…

java网络原理(四)----tcp特性

一.滑动窗口 滑动窗口&#xff1a;可以提高传输效率&#xff0c;准确的来说是让tcp在可靠传输的前提下&#xff0c;效率不要太拉胯。使用滑动窗口不能使tcp变的比UDP块&#xff0c;但能减少差距。 前面谈过tcp的传输数据的时&#xff0c;会把数据进行编号&#xff0c;每次传固…

Go语言介绍以及如何在Go语言中操作MySQL数据库

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

Oracle中实现根据条件对数据的增删改操作——Merge Into

一、需求描述 在我们进行项目开发的过程中&#xff0c;会遇到这样的场景&#xff0c;需要根据某个条件对数据进行增、删、改的操作&#xff1b;遇到这种情况我们有2种方法进行解决&#xff1a; 方法一&#xff1a;①查询指定条件&#xff1b;②根据查询出的指定条件结果在执行…

LeetCode146:LRU缓存

leetCode&#xff1a;146. LRU 缓存 题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#x…

ZnO非线性电阻产品特征技术规范

ZnO非线性电阻是一种多组分的多晶陶瓷半导体。它以ZnO为主体,添加其它各种成分组成。不同厂家及研究机构的添加物成分不完全相同,当添加物含量超过0.001mol时开始呈现非线性&#xff0c;典型的ZnO非线性电阻的显微结构包括四部分: ① ZnO 主体:它是由电阻率为0.0010m~0.10m&…