90. 子集 II

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。

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

示例 1:

输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]
示例 2:

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

提示:

1 <= nums.length <= 10
-10 <= nums[i] <= 10

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subsets-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析

参考:https://github.com/youngyangyang04/leetcode-master/blob/master/problems/0090.%E5%AD%90%E9%9B%86II.md
去重可参考:https://blog.csdn.net/weixin_43942435/article/details/123380706

题解(Java)

三部曲法:

class Solution {List<List<Integer>> ans = new LinkedList<>();LinkedList<Integer> path = new LinkedList<>();public List<List<Integer>> subsetsWithDup(int[] nums) {Arrays.sort(nums);backTracking(nums, 0);return ans;}private void backTracking(int[] nums, int start) {ans.add(new LinkedList<Integer>(path));for (int i = start; i < nums.length; i++) {if (i > start && nums[i] == nums[i - 1]) {continue;} else {path.add(nums[i]);backTracking(nums, i + 1);path.removeLast();}}}
}

选/不选法:

class Solution {private List<List<Integer>> ans = new LinkedList<>();private LinkedList<Integer> path = new LinkedList<>();public List<List<Integer>> subsetsWithDup(int[] nums) {Arrays.sort(nums);helper(nums, 0);return ans;}private void helper(int[] nums, int index) {if (index == nums.length) {ans.add(new LinkedList<>(path));} else {int next = index;while (next < nums.length && nums[next] == nums[index]) {next++;}helper(nums, next);path.add(nums[index]);helper(nums, index + 1);path.removeLast();}}
}

90. 子集 II(中等 回溯 数组)相关推荐

  1. LeetCode 90.子集 II 中等难度

    90. 子集 II 题目: 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例:输入: [1,2,2] 输出: [[2],[1],[ ...

  2. leetcode 90. 子集 II(回溯算法)

    给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集). 解集 不能 包含重复的子集.返回的解集中,子集可以按 任意顺序 排列. 示例 1: 输入:nums = [1 ...

  3. LeetCode 90. 子集 II(回溯+剪枝)

    文章目录 1. 题目信息 2. 解题 2.1 循环 2.2 回溯 1. 题目信息 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例 ...

  4. LeetCode 90. 子集 II【数组,回溯算法,排序去重】

    90. 子集 II 给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集). 解集 不能 包含重复的子集.返回的解集中,子集可以按 任意顺序 排列. 示例 1: 输入 ...

  5. 回溯模板+leetcode——78. 子集 + 90. 子集 II

    回溯法 一般情况下,看到题目要求「所有可能的结果」,而不是「结果的个数」,我们就知道需要暴力搜索所有的可行解了,可以用「回溯法」. 「回溯法」实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻 ...

  6. leetcode系列-90.子集 II

    leetcode系列–第90题.子集 II 做此题之前务必先做 第78题题目描述: 给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集). 解集 不能 包含重复的子 ...

  7. leetcode 90. 子集 II 思考分析

    与本题相关联的题目解析: leetcode 78. 子集 思考分析 leetcode 40. 组合总和 II思考分析 题目 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集 ...

  8. Leetcode 90. 子集 II 解题思路及C++实现

    解题思路: 经典的深度优先搜索问题. 这里,根据子集的元素个数 i ,分别进行 dfs .因为 nums 数组中有重复元素,所以在 dfs 程序中,需要有一个去重的判断. 判断逻辑为:当前元素与上一个 ...

  9. [leetcode]90. 子集 II

    bitmasking: 歪打正着,想着跟子集1(没有重复的元素)差不多,去下重就好了,然后没排序,然后就出现了重复的子集,然后排下序观察输出,然后就好了???,然后发现没排序重复是因为有的子集包含的元 ...

  10. 力扣90. 子集 II(JavaScript)

    var subsetsWithDup = function(nums) {let arr=[]let p=[]//去重需要排序nums.sort()const dd=function(index){/ ...

最新文章

  1. 5 个越早知道越好的 Python 特性
  2. 采购订单模板_采购必备:如何搭建合规的采购流程
  3. File如何转换成MultipartFile
  4. HDFS中的NameNode和DataNode
  5. Java中 Cloneable 、Serializable 接口详解
  6. 育网校园云盘,私有云盘,电子备课系统。
  7. 【软件工程】软件工程需求分析——面向对象分析
  8. android 离线音乐播放器,5款顶级Android离线音乐播放器,哪款才是你的菜?
  9. html添加微信号,html代码点击复制微信号并自动打开微信添加好友
  10. 达人评测 R7 PRO 6850HS 核显相当于什么显卡
  11. 利用Python创建文件
  12. 双向dijkstra
  13. 说说海龟交易法则的基本原理,如何实现海龟交易策略?
  14. selenium模拟浏览器-----爬取马蜂窝地区全部景点
  15. QT下实现判断IP地址和掩码有效性的类
  16. Habse中Rowkey的设计原则——通俗易懂篇
  17. Django的下载与安装
  18. 2019最新某图灵系列丛书(交互设计、编程、大数据、人工智能等)
  19. PMSM FOC控制 Matlab/Simulink仿真之反Park变换
  20. 跟小丸子学基础口语4-10

热门文章

  1. broker可以禁用吗 time_【pximouse可以禁用吗】pximouse是什么程序_pximouse是什么
  2. 互联网社交出海:赤子城年内涨幅280%,“深水区”故事如何说好?
  3. python中forward是什么意思_pytorch 中forward 的用法与解释说明
  4. 乾元浩完成A股上市辅导工作:连续多年盈利,中牧股份为控股股东
  5. Android IBeacon
  6. 数据结构哈希表的基本操作(C语言)
  7. Unity导弹,射击
  8. 苹果官方付费升级内存_vivo推出内存扩容服务:良心还是坑钱?
  9. 佰落暑期java自学记录-11
  10. 关于MSP430单片机程序烧写的介绍