LeetCode 90. 子集 II【数组,回溯算法,排序去重】
90. 子集 II
给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。
输入: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【数组,回溯算法,排序去重】相关推荐
- leetcode 90. 子集 II(回溯算法)
给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集). 解集 不能 包含重复的子集.返回的解集中,子集可以按 任意顺序 排列. 示例 1: 输入:nums = [1 ...
- LeetCode 90. 子集 II(回溯+剪枝)
文章目录 1. 题目信息 2. 解题 2.1 循环 2.2 回溯 1. 题目信息 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例 ...
- LeetCode 90.子集 II 中等难度
90. 子集 II 题目: 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例:输入: [1,2,2] 输出: [[2],[1],[ ...
- leetcode 90. 子集 II 思考分析
与本题相关联的题目解析: leetcode 78. 子集 思考分析 leetcode 40. 组合总和 II思考分析 题目 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集 ...
- Leetcode 90. 子集 II 解题思路及C++实现
解题思路: 经典的深度优先搜索问题. 这里,根据子集的元素个数 i ,分别进行 dfs .因为 nums 数组中有重复元素,所以在 dfs 程序中,需要有一个去重的判断. 判断逻辑为:当前元素与上一个 ...
- [leetcode]90. 子集 II
bitmasking: 歪打正着,想着跟子集1(没有重复的元素)差不多,去下重就好了,然后没排序,然后就出现了重复的子集,然后排下序观察输出,然后就好了???,然后发现没排序重复是因为有的子集包含的元 ...
- 回溯模板+leetcode——78. 子集 + 90. 子集 II
回溯法 一般情况下,看到题目要求「所有可能的结果」,而不是「结果的个数」,我们就知道需要暴力搜索所有的可行解了,可以用「回溯法」. 「回溯法」实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻 ...
- sum 去重_总结leetcode上【排列问题】【组合问题】【子集问题】回溯算法去重的两种写法!...
本周小结!(回溯算法系列三)续集 在 本周小结!(回溯算法系列三) 中一位录友对 整颗树的本层和同一节点的本层有疑问,也让我重新思考了一下,发现这里确实有问题,所以专门写一篇来纠正,感谢录友们的积极交 ...
- 【暴力枚举】LeetCode 90. Subsets II
LeetCode 90. Subsets II solution1和2均是利用set的,3和4是不利用set的 Solution1:我的答案 迭代法 class Solution { public:v ...
最新文章
- SAP QM 主检验特性主数据关键字段解释
- 人工智能应用于建筑领域新前沿
- LinearLayout、RelativeLayout、FrameLayout居中显示
- win10系统 ubuntu子系统 进行ndk编译笔记
- Python+Opencv建立一个文档扫描器
- android 人脸识别_小模型,高精度!小视科技推出极致轻量型人脸识别SDK
- python实现knn算法鸢尾花_Python学习之knn实现鸢尾花分类
- delphi控件切图界面闪烁_先本设计教你跳过UI小程序的七个坑
- Axure实现提示文本单击显示后自动消失的效果
- springboot数据源oracle,springboot+mybatis中使用多数据源oracle数据库
- (转) Deep Learning Resources
- MRO的计算(C3算法及应用)
- 【笔试/面试】数组及其内存结构
- 关于OCR身份证识别
- matlab心电信号特征提取
- 前端面试自我介绍话术
- Java 常用数据类型(总结)
- Golang Beego框架之WebIM例子分析
- 命名空间“xxx”中不存在类型或命名空间名“xxx”(是否缺少程序集引用)
- Android verified boot 2.0 vbmeta 数据结构解析
热门文章
- html5 section与div,关于html5中的section标签与div标签的区别(内有实例)
- Quartus Prime设计七人投票表决器
- pte模拟考试_PTE考试:模拟题
- 模拟电路c语言编程题,计算机C语言模拟题
- audit CIS加固性能对比
- 20个MATLAB高级数据可视化案例-MATLAB高级绘图教程
- 没想到苹果才是最赚钱的游戏公司!一年净赚85亿美元,比索尼微软任天堂加起来还多...
- Hadoop应用配置
- Windows Practice_文件_文件分割器(二)
- Axure动态面板学习——模仿AssistiveTouch