【LeetCode】解题90:Subsets II

TLSR8258蓝牙Mesh实战:从SDK下载到自定义通信指令全流程(附避坑指南) 本文详细介绍了TLSR8258蓝牙Mesh开发的完整流程,从SDK下载、环境搭建到自定义通信指令的实现。通过实战案例和避坑指南,帮助开发者快速掌握低功耗蓝牙Mesh网络构建技巧,适用于智能家居、工业监控等物联网场景。 阅读详情

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++;
        }
    }
}

修改过程

  • 递归前没有对数组排序,因此循环中没能将重复的数字完全剔除。
生成模型实战 | 基于Transformer生成音乐 本文介绍了基于Transformer架构的音乐生成方,将音乐视为一系列事件序列进行处理。与将音乐表示为多维图像的MuseGAN不同,该方使用类似GPT的仅解码器模型,基于先前事件预测下一个音乐事件。模型使用MIDI格式的钢琴音乐数据,通过分词处理将音符转换为note-on、note-off、time-shift和velocity四种事件类型,共388个独特词元,映射为索引序列后输入网络。训练完成后,可通过调整温度参数控制生成音乐的新颖性,从而创作出风格类似训练数据且连贯逼真的音乐作品。 阅读详情

相关推荐

K230+canMV开发中常见的数据类型转换参考示例

【代码】K230+canMV开发中常见的数据类型转换参考示例。

weixin_47446386的博客 49

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的博客 202

把核心变干净的代价与回报:为什么推动 Clean Core,几乎绕不开 SAP Integration Suite 与 API Management

Clean Core的核心价值在于构建可持续升级的ERP系统架构,其关键不在于减少代码或限制扩展,而是通过解耦和治理实现系统边界的清晰划分。这一理念将推动企业从传统的"私搭乱建"式集成向平台化工程转型,而SAP Integration Suite和API Management正是实现这一转型的核心组件。 Integration Suite作为集成中枢,通过统一平台、可复用内容库和事件驱动架构,将碎片化连接转变为标准化能力;API Management则负责建立接口治理体系,通过统一入口、

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

LeetCode解--90. 子集 II

1. 目 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: [1,2,2] 输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ] 2. 分析 &nbsp;&nbsp;&nbsp;&nbsp;参考目78。 &nbsp;&nbsp;&nbsp;&nb...

GuanghaoChen的博客 694

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的博客 247

LeetCode算法90:子集 II解析

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

Alex的博客 500

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

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

coordinate的博客 2447

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

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

MebiuW的专栏 1683

90. Subsets II

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

qq_40844444的博客 958

leetcode训练 90. Subsets II

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

Ema1997的博客 287

[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

小榕流光的专栏 1202

78. Subsets90. Subsets II

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

weixin_41554427的博客 806

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的博客 311

力扣90——子集 II

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

death05的博客 1348

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

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

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

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

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

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

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

Lee Chen的博客 384

LeetCode解题126:Word Ladder II(BFS算法

LeetCode解题 126:Word Ladder II(BFS算法)Problem 126: Word Ladder II [Hard]解题思路Solution (Java)修改过程 Problem 126: Word Ladder II [Hard] Given two words (beginWord and endWord), and a dictionary’s word list, ...

Fayedily的博客 771

LeetCode解题188:Best Time to Buy and Sell Stock IV(动态规划)

LeetCode解题 188:Best Time to Buy and Sell Stock IV (动态规划)Problem 188: Best Time to Buy and Sell Stock IV [Hard]解题思路Solution (Java)修改过程 Problem 188: Best Time to Buy and Sell Stock IV [Hard] Say you hav...

Fayedily的博客 594

LeetCode解题123:Best Time to Buy and Sell Stock III(动态规划)

LeetCode解题 123:Best Time to Buy and Sell Stock III (动态规划)Problem 123: Best Time to Buy and Sell Stock III [Hard]解题思路I. O(2n)时间+O(3n)空间II. O(2n)时间+O(n)空间III. O(n)时间+O(4)空间Solution (Java) Problem 123: B...

Fayedily的博客 487

LeetCode解题119:Pascal's Triangle II

LeetCode解题 118:Pascal's Triangle II Problem 118: Pascal's Triangle II [Easy]解题思路Solution (Java) Problem 118: Pascal’s Triangle II [Easy] Given a non-negative index k where k ≤ 33, return the kth index...

Fayedily的博客 444

LeetCode解题78:Subsets

LeetCode解题 78:Subsets Problem 78: Subsets [Medium]解题思路Solution (Java)修改过程 Problem 78: Subsets [Medium] Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The so...

Fayedily的博客 443

应届生简历模板word下载免费

应届生简历模板word下载免费适用于相关岗位求职使用。本作品提供DOC格式文件可免费下载

Python Crash Course 英文原版 pdf

This book would not have been possible without the wonderful andextremely professional staff at No Starch Press. Bill Pollock invited me towrite an introductory book, and I deeply appreciate that original offer.Tyler Ortman helped shape my thinking in the early stages of drafting.Liz Chadwick’s and Leslie Shen’s initial feedback on each chapter wasinvaluable, and Anne Marie Walker helped to clarify many parts of thebook. Riley Hoffman answered every question I had about the process ofassembling a complete book and patiently turned my work into a beautifulfinished product.

上一篇: 【LeetCode】解题85:Maximal Rectangle
下一篇: 【LeetCode】解题105:Construct Binary Tree from Preorder and Inorder Traversal
Fayedy
博客等级 码龄11年 2粉丝 57原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值