【LeetCode】解题90:Subsets II

使用trae自动生成前后端分离的web应用程序 使用ai自动生成前后端分离的web应用程序 阅读详情

Problem 90: Subsets II [Medium]

Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).

Note: The solution set must not contain duplicate subsets.

Example 1:

Input: [1,2,2]
Output:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]

来源:LeetCode

解题思路

与题解Problem 78: Subsets类似,采用深度优先搜索,因为输入中含有重复数字,为了防止重复组合,每次循环时需要去掉重复的数字(即广度搜索时)。

  • 每一轮从候选数组中选择一个数x加入组合,选择时需要剔除重复的数字,但选择的x可以与组合中已经存在的数重复,然后将组合加入最终结果result列表中。
  • 注意:为了防止重复组合,需要保证两点:
    a. 每次选择的数x的下标不能比已经存在于组合中的数的下标小,因此递归时需要增加搜索范围参数,确保不会与之前搜索过的数重复。
    b. 每次选择的数x不能与这一轮选择中的其他数重复,因此需要循环剔除,但可以与数组中已经存在的数重复。即,广度搜索时不能重复,但深度搜索时可以重复。

要点:递归

Solution (Java)

class Solution {
    public List<List<Integer>> subsetsWithDup(int[] nums) {
        int N = nums.length;
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        result.add(new ArrayList<Integer>());
        if(N == 0) return result;
        Arrays.sort(nums);
        dfs(nums, 0, N, result, new ArrayList<Integer>());
        return result;
    }
    void dfs(int[] nums, int start, int end, List<List<Integer>> result, List<Integer> father){
        int last;
        for(int i = start; i < end;){
            List<Integer> son = new ArrayList<Integer>(father);
            son.add(nums[i]);
            result.add(son);
            dfs(nums, i+1, end, result, son);
            // skip duplicates
            last = nums[i];
            while(i < end && nums[i] == last) i++;
        }
    }
}

修改过程

  • 递归前没有对数组排序,因此循环中没能将重复的数字完全剔除。
Android Audio基础——系统服务(二) AudioService 继承自 IAudioService.Stub。IAudioService.Stub 类很明显是通过 IAudioService.aidl 自动生成的。AudioService 位于 Binder Native 端。AudioManager 拥有 AudioService 的 Binder Proxy 端,是 AudioService 在客户端的一个代理。几乎所有客户端对 AudioManager 进行的请求,最终都会交由 AudioService 实现。 阅读详情

相关推荐

从CTF到实战:Frida Hook无导出SO函数的3种特殊姿势

本文深入探讨了在移动安全逆向工程中,如何利用Frida Hook无导出SO函数的三种高级技巧:字符串引用定位法、调用栈回溯法和内存特征码扫描。针对安卓So层加固和混淆场景,文章结合CTF赛题与实战案例,详细解析了每种方法的原理、实现步骤与适用场景,为安全研究人员提供了从理论到实践的完整解决方案。

jenkins8butler的博客 515

LeetCode题解:90. 子集 II,迭代+位运算,JavaScript,详细注释

原题链接:https://leetcode-cn.com/problems/subsets-ii/ 解题思路: 用两遍循环暴力穷尽所有集合。 第一遍循环是for (let i = 0; i < 1 << nums.length; i++) {},即穷尽了所有子集数量,但不做是否存值的判断。 第二遍循环for (let j = 0; j < nums.length; j++) {},即遍历每个索引,在通过i & (1 << j)判断当前索引是否需要存值。 关于去重

Lee Chen的博客 203

STM32异常与中断过程详解

1. 异常与中断概念引入 异常主要是指来自CPU内部的意外事件,比如执行了未定义指令、算术溢出、除零运算等发生在CPU内部的意外事件,这些异常的发生,会引起CPU运行相应的异常处理程序;中断一般来自硬件(如片上外设、外部I/O输入等)发生的事件,当这些硬件产生中断信号时,CPU会暂停当前运行的程序,转而去处理相关硬件的中断服务程序。但无论是异常还是中断,都会引起程序执行偏离正常的流程,转而去执行异常/中断的处理函数。 下面对异常和中断的介绍,如果中断信号的产生原因来自CPU内部,则称之为异常;如果中断信号来

luobeihai的博客 1万+

LeetCode算法题90:子集 II解析

给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: [1,2,2] 输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ] 这个题与78题子集的解题思路基本一致,这里的数组可以包含重复元素,所以第一种集合添加元素扩充的方法需要添加约束,之前是遇到新元素所有的原来的...

Alex的博客 501

生产环境下oracle19c rac恢复节点2

现状:目前节点1数据库集群服务处于正常,节点2服务器由于系统故障无法恢复,确认系统重装。目标:不影响业务的情况下,重新把节点2添加回集群中。

sqlora的专栏 865

复用浏览器之跳过扫码登录

复用浏览器 1、通过命令启动浏览器:chrome --remote-debugging-port=9222(前提是退出所有的chrome浏览器) 2、启动浏览器之后,在地址栏输入127.0.01:9222,成功复用如下图所示:

qq_43911915的博客 2032

LeetCode题解:90. 子集 II,递归+for循环+回溯,JavaScript,详细注释

原题链接:https://leetcode-cn.com/problems/subsets-ii/ 解题思路: 使用DFS生成所有可能的排列情况。 每层递归从current开始遍历nums。 将遍历到的值存入subset,并进入下一层递归,表示当前值存在与子集中的情况。 进入下一层递归后,将当前值从subset中弹出,继续遍历数组,表示当前值不存在与子集中的情况。 如何去重: 以输入[1,2,2]为例,其在不进行去重的情况下,输出的结果为[[],[1],[1,2],[1,2,2],[1,2],[2],[

Lee Chen的博客 248

华为OD机试双机位C卷-水库溃坝填补(Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【水库溃坝填补】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。水库溃坝填补。

qq_45776114的博客 2108

LeetCode题解:78. 子集,递归回溯,JavaScript,详细注释

原题链接:https://leetcode-cn.com/problems/subsets/ 解题思路: 使用DFS生成所有可能的排列情况。 所有的子集包括nums中的每个元素包含于不包含两种状态。 可以在递归下探到下一层之前,利用当前元素存入或不存入subset的状态进行区分。 function dfs(nums, subset, current, result) { // 递归终止条件 // 由于每次进入递归时,current表示将要插入元素的位置 // 因此当current等于nums

Lee Chen的博客 387

【图像去噪】论文复现:降维打击!图像对输入变成像素对输入!Pytorch实现Noise2Void(N2V),基于U-Net模型训练,简洁明了理解N2V核心思想!附训练好的灰度图和RGB图的模型文件!

论文题目:Noise2Void-Learning Denoising from Single Noisy Images —— Noise2Void -从单个噪声图像中学习去噪【图像去噪】论文精读:Noise2Void-Learning Denoising from Single Noisy Images(N2V)由于源码是tensorflow版本,本文将基于Pytorch复现。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1355

视觉SLAM十四讲slambook2示例代码所有依赖库的编译安装教程(VTK、OpenCV3、ceres、Sophus、g2o、Eigen、Pangolin、googletest等)

这是2021年的最后一篇博客~ 新年快乐! 0 准备工作   首先需要先安装cmake编译器: sudo apt-get install cmake   以及,将十四讲的示例代码克隆下来(十四讲的源码地址点击这里): git clone --recursive https://github.com/gaoxiang12/slambook2.git   由于里面的3rdparty文件夹内所有内容都来自于其他github仓库,所以需要加上--recursive参数,不然克隆下来的内容不完整。   如果你.

zeeq的博客 7837

Leetcode 90:子集 II(最详细的解法!!!)

给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: [1,2,2] 输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ] 解题思路 这个问题是之前问题Leetcode 78:子集(最详细的解法!!!)的扩展。我们用之前的解法会出现这样的问题,[1,2...

coordinate的博客 2456

SAP-ABAP:SAP信贷管理核心:CL_UKM_BUPA_FACTORY类完整解析与实践指南

SAP信贷管理核心类CL_UKM_BUPA_FACTORY解析 CL_UKM_BUPA_FACTORY是SAP信贷管理(UKM)模块的核心类,作为业务伙伴信贷数据的中央控制台,它提供: 统一入口:标准化实例化客户/供应商信贷对象 主要功能: 获取单条/批量业务伙伴数据 安全保存数据变更 封装底层数据访问逻辑 典型应用场景: 信贷主数据批量维护 自动化限额调整 订单信贷实时检查 性能优化建议: 使用批量方法替代循环单条处理 合理设置字段选择 实施缓存策略 该类通过简洁API简化复杂信贷操作,是SAP信贷管理开

baidu_35680696的博客 1208

Leetcode 90. Subsets II 子集2 解题报告

1 解题思想这道题有一个简化版,没有看的可以先看看Leetcode 78. Subsets 子集 解题报告 这道题更复杂的原因在于,给定的数组会存在重复的情况,实际的解法也很common,我相信我已经在之前很多的解题里面说过了,背下来就好:0、首先需要排序,然后用回溯的方式组合选择,序列在递归到最后一个位置时生成。 规则0:所有数都有不选的这种状况 规则1:第一个数(index=0)可以选 规

MebiuW的专栏 1688

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

90. Subsets II

返回该数组的所有可能的子集(幂集),但解集不能包含重复的子集。给定一个可能包含重复元素的整数数组。

qq_40844444的博客 963

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

leetcode专题训练 90. Subsets II

这道题是第78题的升级版,78题中所给数组的元素都是不相同的,所以直接回溯搞一发,每个元素都加或不加搞一发即可。然而这道题中元素可能是相同的,所以不能直接每个元素加或不加来搞。比如样例中的[1, 2, 2],只加前面的那个2和只加后面那个2的结果是重复的,所以需要对相同的数进行判断。 在78题中,一个长为l的数组,子集list的第一个元素可以是数组中的每一个元素,第二个元素就是第一个元素的索引之后的数组中的每一个元素,以此类推。解法如下: class Solution: def subsets(se

Ema1997的博客 300

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

[leetcode] 90. Subsets II 解题报告

题目链接:https://leetcode.com/problems/subsets-ii/ Given a collection of integers that might contain duplicates, nums, return all possible subsets. Note: Elements in a subset must be in non-d

小榕流光的专栏 1204

LeetCode-Go 题解 90:Subsets II 含重复元素子集的全枚举与回溯去重实战

LeetCode 第 90 题 Subsets II 要求给定一个**可能包含重复元素**的整数数组,返回其全部子集(幂集),且解集不能包含重复子集。本文以 LeetCode-Go 仓库中 [leetcode/0090.Subsets-II/README.md](https://link.gitcode.com/i/f8884c29a81afd2e2d96405cc43dd8ae) 为骨架,结合仓

gitblog_00374的博客 264

78. Subsets和90. Subsets II

子集中元素的个数可以是0,1,2...,nums.size()对于每一种情况,可以用回溯来收集。

weixin_41554427的博客 913

Leetcode 90. Subsets II

Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set). Note: The solution set must not contain duplicate subsets. Example: Input: [1,2,2] ...

salmonwilliam的博客 316

力扣90——子集 II

原题 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: [1,2,2] 输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ] 原题url:https://leetcode-cn.com/problems/subsets-ii/ 解题 递归 这道题,针对已经刷...

death05的博客 1355

90 Subsets II

题目链接:https://leetcode.com/problems/subsets-ii/题目:Given a collection of integers that might contain duplicates, nums, return all possible subsets.Note: Elements in a subset must be in non-descending ord

再见了,过去的名字,新的奋斗开始啦! 480

ValueCell 多智能体金融平台入门:10分钟一键部署你的 AI 投研交易系统

ValueCell 是一个社区驱动的多智能体金融应用平台,把新闻、研究、自动交易智能体整合为一套系统,让你在本地完成选股、财报分析和策略执行。本文带你完成一键部署、上手核心能力,并接好模型配置。 [![ValueCell 多智能体金融平台首页:行情监控、新闻推送与自选股列表](https://raw.gitcode.com/gh_mirrors/va/valuecell/raw/9793e9c0

gitblog_00876的博客 339

leetcode解题笔记:backtracking类型解题思路

基本概念: backtracking(回溯算法)也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。 回溯算法说白了就是穷举法。不过回溯算法使用剪枝函数,剪去一些不可能到达最终状态(即答案状态)的节点,从而减少状态空间树节点的生成。 回溯法是一个既带有系统性又带有跳跃性的的搜索算法。它在包含问题的所有解的解空间树中,按照深

(づ。◕‿‿◕。)づgigi奋斗在前端和刷题中╮(╯﹏╰)╭ 1万+

【LeetCode】 90. Subsets II 子集 II(Medium)(JAVA)

【LeetCode】 90. Subsets II 子集 II(Medium)(JAVA) 题目地址: https://leetcode.com/problems/subsets-ii/ 题目描述: Given a collection of integers that might contain duplicates, nums, return all possible subsets (the...

qq_16927853的博客 233

【LeetCode】90. Subsets II 解题报告(Python & C++)

【LeetCode】90. Subsets II 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/subsets-ii/description/ 题目描述: Given a collection of integers that might contain duplicates, nums, re...

负雪明烛 3240
上一篇: 【LeetCode】解题85:Maximal Rectangle
下一篇: 【LeetCode】解题105:Construct Binary Tree from Preorder and Inorder Traversal
Fayedy
博客等级 码龄11年 2粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值