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

  • 使用used数组进行排序去重
class Solution {static List<List<Integer>> res = new ArrayList<>();static LinkedList<Integer> path = new LinkedList<>();public List<List<Integer>> subsetsWithDup(int[] nums) {res.clear();boolean[] used = new boolean[nums.length];Arrays.sort(nums);backtracking(nums, 0, used);return res;}public void backtracking(int[] nums, int start, boolean[] used) {res.add(new LinkedList<>(path));if (path.size() == nums.length) return;for (int i = start; i < nums.length; i++) {if (i - 1 >= 0 && nums[i] == nums[i - 1] && !used[i - 1]) continue;path.add(nums[i]);used[i] = true;backtracking(nums, i + 1, used);path.removeLast();used[i] = false;}}
}
  • 不使用used判重数组,i > start跳过当前树层使用过的、相同的元素
class Solution {static List<List<Integer>> res = new ArrayList<>();static LinkedList<Integer> path = new LinkedList<>();public List<List<Integer>> subsetsWithDup(int[] nums) {res.clear();Arrays.sort(nums);backtracking(nums, 0);return res;}public void backtracking(int[] nums, int start) {res.add(new LinkedList<>(path));if (path.size() == nums.length) return;for (int i = start; i < nums.length; i++) {if (i > start && nums[i] == nums[i - 1]) continue;path.add(nums[i]);backtracking(nums, i + 1);path.removeLast();}}
}

LeetCode 90. 子集 II【数组,回溯算法,排序去重】相关推荐

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

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

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

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

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

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

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

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

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

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

  6. [leetcode]90. 子集 II

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

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

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

  8. sum 去重_总结leetcode上【排列问题】【组合问题】【子集问题】回溯算法去重的两种写法!...

    本周小结!(回溯算法系列三)续集 在 本周小结!(回溯算法系列三) 中一位录友对 整颗树的本层和同一节点的本层有疑问,也让我重新思考了一下,发现这里确实有问题,所以专门写一篇来纠正,感谢录友们的积极交 ...

  9. 【暴力枚举】LeetCode 90. Subsets II

    LeetCode 90. Subsets II solution1和2均是利用set的,3和4是不利用set的 Solution1:我的答案 迭代法 class Solution { public:v ...

最新文章

  1. SAP QM 主检验特性主数据关键字段解释
  2. 人工智能应用于建筑领域新前沿
  3. LinearLayout、RelativeLayout、FrameLayout居中显示
  4. win10系统 ubuntu子系统 进行ndk编译笔记
  5. Python+Opencv建立一个文档扫描器
  6. android 人脸识别_小模型,高精度!小视科技推出极致轻量型人脸识别SDK
  7. python实现knn算法鸢尾花_Python学习之knn实现鸢尾花分类
  8. delphi控件切图界面闪烁_先本设计教你跳过UI小程序的七个坑
  9. Axure实现提示文本单击显示后自动消失的效果
  10. springboot数据源oracle,springboot+mybatis中使用多数据源oracle数据库
  11. (转) Deep Learning Resources
  12. MRO的计算(C3算法及应用)
  13. 【笔试/面试】数组及其内存结构
  14. 关于OCR身份证识别
  15. matlab心电信号特征提取
  16. 前端面试自我介绍话术
  17. Java 常用数据类型(总结)
  18. Golang Beego框架之WebIM例子分析
  19. 命名空间“xxx”中不存在类型或命名空间名“xxx”(是否缺少程序集引用)
  20. Android verified boot 2.0 vbmeta 数据结构解析

热门文章

  1. html5 section与div,关于html5中的section标签与div标签的区别(内有实例)
  2. Quartus Prime设计七人投票表决器
  3. pte模拟考试_PTE考试:模拟题
  4. 模拟电路c语言编程题,计算机C语言模拟题
  5. audit CIS加固性能对比
  6. 20个MATLAB高级数据可视化案例-MATLAB高级绘图教程
  7. 没想到苹果才是最赚钱的游戏公司!一年净赚85亿美元,比索尼微软任天堂加起来还多...
  8. Hadoop应用配置
  9. Windows Practice_文件_文件分割器(二)
  10. Axure动态面板学习——模仿AssistiveTouch