Leetcode 中等:78. 子集

【中等】力扣算法题解析LeetCode78:子集 题目要求生成一个整数数组的所有可能子集(幂集),且解集中不能包含重复子集。采用位运算枚举法,利用二进制位表示元素是否被选中,遍历所有可能的掩码组合生成子集。该方法时间复杂度为O(n×2ⁿ),空间复杂度为O(1)(不考虑结果存储)。Java代码通过遍历掩码和检查二进制位实现,高效且简洁。例如输入[1,2,3]输出[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]。适用于元素互不相同的数组,最大长度为10。 阅读详情

题目:子集

  • 题号:78
  • 难度:中等
  • https://leetcode-cn.com/problems/subsets/

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

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

示例1:

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

示例2:

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

实现

第一种:回溯法

依次以nums[i]为启始点进行搜索,且后续搜索数值都要大于前一个数值,这样会避免重复搜索。

回溯过程

C# 语言

public class Solution
{
    private IList<IList<int>> _result;
    
    public IList<IList<int>> Subsets(int[] nums)
    {
        _result = new List<IList<int>>();
        int len = nums.Length;

        if (len == 0)
        {
            return _result;
        }
        IList<int> item = new List<int>();
        Find(nums, 0, item);
        return _result;
    }

    private void Find(int[] nums, int begin, IList<int> item)
    {
        // 注意:这里要 new 一下
        _result.Add(new List<int>(item)); 

        if (begin == nums.Length)
            return;

        for (int i = begin; i < nums.Length; i++)
        {
            item.Add(nums[i]);
            Find(nums, i + 1, item);

            // 组合问题,状态在递归完成后要重置
            item.RemoveAt(item.Count - 1); 
        }
    }
}

第二种:子集扩展法

C# 语言

public class Solution
{
    public IList<IList<int>> Subsets(int[] nums)
    {
        IList<IList<int>> result = new List<IList<int>>();
        IList<int> item = new List<int>();
        result.Add(item);
        for (int i = 0; i < nums.Length; i++)
        {
            for (int j = 0, len = result.Count; j < len; j++)
            {
                item = new List<int>(result[j]);
                item.Add(nums[i]);
                result.Add(item);
            }
        }
        return result;
    }
}

第三种:位运算

思路: 利用整数集合的思路。

以{1,2,3}为例,三个数,共2^3个子集。

000 -> []
100 -> [1]
101 -> [1,3]
110 -> [1,2]
111 -> [1,2,3]
...

C# 语言

public class Solution
{
    public IList<IList<int>> Subsets(int[] nums)
    {
        IList<IList<int>> result = new List<IList<int>>();
        int count = nums.Length;

        for (int i = 0; i < 1 << count; i++)
        {
            IList<int> item = new List<int>();
            for (int j = 0; j < count; j++)
            {
                int mask = 1 << j;
                if ((mask & i) != 0)
                    item.Add(nums[j]);
            }
            result.Add(item);
        }
        return result;
    }
}

Python 语言

class Solution:
    def subsets(self, nums: List[int]) -> List[List[int]]:
        count = len(nums)
        result = []
        for i in range(1 << count):
            item = []
            for j in range(count):
                mask = 1 << j
                if (mask & i) != 0:
                    item.append(nums[j])
            result.append(item)
        return result
Leetcode 78: 子集 给定一个整数数组nums,其中元素,返回其所有可能的子集(幂集)。回溯是一种非常适合解决子集枚举问题的方法。它通过递归逐步生成每一个子集,并在每一步中进行选择和撤销。以下是回溯法的标准实现,对于任意数组nums,可以生成其所有子集。 阅读详情

相关推荐

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

# 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 # 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 # 示例 1: # 输入:nums = [1,2,3] # 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] # 示例 2: # 输入:nums = [0] # 输出:[[],[0]]

【回溯算法】leetcode 78. 子集

子集

lele_ne的博客 468

体素坐标(voxel_coors)在mmdetection3d中的理解

体素坐标(voxel_coors)在mmdetection3d中的理解

weixin_38362784的博客 4217

【打卡第222道】【回溯】【leetCode高频】:78. 子集

1、题目描述 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 2、算法分析 这是一道比较典型的回溯问题。属于子集问题。 首先说下回溯算法,回溯算法是基于树的递归思想,所谓回溯,就是从子结点向父结点的指针跳跃。 子集问题和组合问题的区别是:子集问题是手机树的所有结点,而组合问题是收集树的叶子结点。 因为子集问题也是组合,无序的,所以,for循环要从startIndex开始。 回溯步骤:

CodingLJ 1266

【低空经济】低空无人机公共测试场与验证基地设计方案

公共测试场与验证基地是为低空无人机相关技术的研发、测试与应用提供一个系统性的平台。在无人机产业蓬勃发展的背景下,建设一个配备完善、功能齐全的公共测试场与验证基地显得尤为重要。该基地不仅可以作为无人机的测试和验证场地,还可以为相关企业、科研机构以及政府部门提供技术支持和服务。因此,为此基地的设计方案必须综合考虑功能性、安全性、灵活性与可持续性等多方面的因素。首先,公共测试场需划分为多个专用区域,以便满足不同类型无人机的测试需求。这包括低空飞行区域、紧急着陆区、操控模拟区和监测与数据采集区等。

2502_92579126的博客 1596

转换shp坐标系之前,设置转换的投影

1.点击目录》工具箱》系统工具箱》Data Management Tools.tbx》投影和变换》创建自定义地理(坐标)变换 2.名称自定义 2.输入地理坐标系可以根据所需要转换的shp文件属性中查询出来 把图层拖入arcgis中,右键属性即可查看 3.复制坐标系,点击“输入地理坐标系”右侧的按钮后,粘贴在顶部搜索框中,并按enter键,选择对应的坐标系 4.点击“输出地理坐标系”右侧的按钮后,选择转换后的坐标系,如4326,选择后点击确认按钮。 5.自定义方法中选择

Wangwangwang___的博客 1862

【LeetCode】子集 [M](递归)

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

小七的博客 399

深入解析rknn-toolkit2混合量化:如何为RK3588和RK356X选择最佳量化策略

本文深入解析了RKNN-Toolkit2混合量化技术,针对瑞芯微RK3588和RK356X芯片的硬件特性差异,提供了最佳量化策略选择指南。通过混合量化技术,开发者可以在保持较高推理效率的同时显著降低精度损失,特别适用于边缘计算场景。文章详细介绍了混合量化的技术原理、实战流程及芯片专属优化策略,帮助开发者充分利用硬件特性提升模型性能。

dog123的博客 258

leetcode刷题 ---- 回溯算法

1: 78. 子集 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 class Solution { public: // 回溯算法的核心:就是 for 循环里面的递归,在递归调用之前「做选择」,在递归调用之后「撤销选择」 // 在决策树上dfs vector<vector<int>> res; vector<vector<int>>

weixin_45521101的博客 376

FPGA图像处理入门 ZYNQ7020 图像中值膨胀腐蚀滤波

图像处理的三种滤波 中值滤波应用较为广泛 综合膨胀和腐蚀可以实现边缘检测。

Coast_的博客 715

【机器学习概率统计】11 贝叶斯统计推断:最大后验

这一节,我们来介绍另外一种统计推断方法:贝叶斯统计推断方法。 1.回顾贝叶斯定理 首先,我们先来复习一下贝叶斯定理: p(Θ∣X)=p(X∣Θ)p(Θ)p(X)p(\Theta|X)=\frac{p(X|\Theta)p(\Theta)}{p(X)}p(Θ∣X)=p(X)p(X∣Θ)p(Θ)​ 在这个简简单单的式子当中,蕴含了我们要掌握的很多重要内容: 贝叶斯定理当中的四个概率表达式,他们都非常重要,在这一节的内容中将反复出现,我们来一一解析一下: p(Θ)p(\Theta)p(Θ):先验分布。 反映的是在

机器学习数学基础系列专栏 3270

LeetCode第78题:子集(中等)

LeetCode第78题:子集(中等) 今日打卡是第22题,之前已经做过 题目:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。 解题思路:借鉴了77题的思路,又尝试用了一次栈。 class Solution { private List<List<Integer>> ans = new ArrayLi...

new_whiter的博客 621

论文翻译:2024 High-Confidence Computing A survey on large language model (LLM) security and privacy: The

大型语言模型(LLMs),如ChatGPT和Bard,已经彻底改变了自然语言理解和生成。它们具有深度语言理解能力、类似人类的文本生成能力、上下文意识和强大的问题解决技能,使它们在各个领域(例如搜索引擎、客户支持、翻译)中变得不可或缺。同时,LLMs也在安全领域获得了关注,揭示了安全漏洞并展示了它们在安全相关任务中的潜力。本文探讨了LLMs与安全性和隐私的交集。具体来说,我们研究了LLMs如何积极影响安全性和隐私,与它们使用相关的潜在风险和威胁,以及LLMs内部的固有漏洞。

CSPhD-winston的博客 1722

leetcode题:78. 子集(中等)

一、题目描述:78. 子集(中等) 给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 来源:力扣(LeetCode) 链接:https:/...

tankpanv的博客 201

在 SAP GUI 里开发与调用 Adobe PDF 表单:SFP 建模 + Driver Program 调用的全流程实战

本文介绍了在SAP系统中使用Adobe PDF表单的完整流程。重点阐述了SAP Interactive Forms相比传统表单工具的优势,特别是在处理复杂排版、条码和交互式字段时的适用性。文章详细说明了开发流程:从安装设计工具Adobe LiveCycle Designer开始,到在SFP事务码中创建Interface和Form的数据模型,再到编写驱动程序的ABAP代码实现PDF输出。特别强调了Interface作为数据契约的重要性,以及如何通过分层设计实现前后端分离开发。最后提供了标准调用链的示例代码,展

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 273

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

代码随想录Day28-LeetCode 93 & 78 & 90

【代码】代码随想录Day28-LeetCode 93 & 78 & 90。

weixin_45830552的博客 109

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

力扣中等题——子集(回溯大法!!!)

我想写就写,反正你们又不看嘿嘿。中等题有点说法。

WenJGo的博客 1254

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

力扣78题详解:C语言实现子集问题

给定一个不含重复元素的整数数组nums,返回其所有可能的子集(幂集)。:解集不能包含重复的子集,顺序无关。

weixin_48941116的博客 989

【力扣】78.子集(python解法)

【时间】2019.05.25 【题目】【力扣】78.子集 (python解法) 题目链接:https://leetcode-cn.com/problems/subsets/ 题目描述: 给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], ...

小C的博客 1280

leetcode 78子集(中等)

leetcode 78子集(中等) 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 步骤: 利用Python的第三方库能够很容易地完成,这个库函数在很多题中都用得到。 class Solution(object): def subsets(self, nums): "

weixin_44456155的博客 125

leetcode78.子集

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/proble...

yyf_blog 615

【LeetCode】78. 子集

题目描述:给定一个互不相同的整数数组nums,返回所有可能的子集(幂集),要求解集不包含重复子集。 解题思路:使用回溯算法,递归搜索所有可能的子集组合。关键点在于每次递归时记录当前状态,并分别处理选择/不选择当前元素的情况。时间复杂度为O(2^n × n),空间复杂度为O(n)。 核心解法: 回溯法:通过递归和回溯,依次生成包含/不包含当前元素的子集 迭代法:逐步构建子集,每次将新元素加入现有子集 位运算:利用位掩码枚举所有可能的子集组合 典型输入输出示例: 输入[1,2,3] → 输出8个子集,包括空集和

qq_32019341的博客 873

子集和问题 算法_LeetCode 题解 | 78.子集

力扣 78. 子集 (点击查看题目)力扣​leetcode-cn.com题目描述给定一组 不含重复元素 的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]解决方案观察全排列 / ...

weixin_39783360的博客 1070

LeetCode 78:子集

LeetCode 78:子集题目描述解题思路代码实现总结 题目描述 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 解题思路 对于一个有n个元素的数组,其子集共有 2^n 个, 我...

香农三定律的博客 256

LeetCode 78. 子集 | Python

使用回溯的思路,解决 LeetCode 《78. 子集》问题

"大梦三千秋的博客 771

C++力扣题目78--子集

相信大家经过了组合问题:77.组合(opens new window)回溯算法:组合问题再剪剪枝(opens new window)216.组合总和III(opens new window)17.电话号码的字母组合(opens new window)39.组合总和(opens new window)40.组合总和II(opens new window)分割问题:131.分割回文串(opens new window)93.复原IP地址(opens new window)

weixin_47675625的博客 1014
上一篇: Leetcode 中等:62. 不同路径
下一篇: Leetcode 中等:89.格雷编码
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青少年编程小助手_Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值