(回溯法)LeetCode#90. Subsets II
来源:互联网 发布:淘宝下架的宝贝在哪里找 编辑:程序博客网 时间:2024/06/14 02:06
- 题目:给定一个二维nums,数组中包含重复元素,返回所有子集(不能包括重复的子集)
- 难度:Medium
思路:遍历数组得到所有子集是一个回溯的思想,由于数组中有重复元素,然而子集又不能出现重复,所以需要在回溯方法中额外加入一个标志数组boolean[] flag
如果flag[i-1]为FALSE并且nums[i]等于nums[i-1],那么说明这次回溯nums[i]应该被过滤
- 代码:
public class Solution { public List<List<Integer>> subsetsWithDup(int[] nums) { List<List<Integer>> result = new ArrayList<>(); if(nums == null || nums.length == 0){ return result; } Arrays.sort(nums); result.add(new ArrayList<Integer>()); backtrack(result, new ArrayList<Integer>(), 0, nums, new boolean[nums.length]); return result; } public void backtrack(List<List<Integer>> list, List<Integer> tmp, int start, int[] nums, boolean[] flag) { for(int i = start; i < nums.length; i++) { if(i > 0 && nums[i] == nums[i-1] && flag[i-1] == false) { continue; } tmp.add(nums[i]); list.add(new ArrayList<>(tmp)); flag[i] = true; backtrack(list, tmp, i+1, nums, flag); tmp.remove(tmp.size()-1); flag[i] = false; } }}
Subsets
http://blog.csdn.net/u012559634/article/details/71915687
阅读全文
0 0
- (回溯法)LeetCode#90. Subsets II
- [leetcode][回溯] Subsets II
- (回溯法)LeetCode#78. Subsets
- 【leetcode题解】【回溯】【54】【M】Subsets II
- LeetCode-90-Subsets II(回溯)-Medium
- LeetCode-90-Subsets II 暴力dfs回溯
- [LeetCode]90.Subsets II
- [Leetcode] 90. Subsets II
- LeetCode --- 90. Subsets II
- [leetcode] 90.Subsets II
- 【leetcode】90. Subsets II
- Leetcode 90. Subsets II
- 90. Subsets II LeetCode
- leetcode 90. Subsets II
- Leetcode 90. Subsets II
- LeetCode *** 90. Subsets II
- LeetCode 90. Subsets II
- leetcode 90. Subsets II
- c++操作符重载与友元函数 单目 双目 左移右移 ==号操作符重载 自定义数组
- virtualbox
- android studio clean project失败时的处理方法
- 在Intellij IDEA上使用Maven构建Spark应用(Scala)
- 时间复杂度
- (回溯法)LeetCode#90. Subsets II
- mybatis入门使用1:mybatis框架搭建和增删改查
- view对象的渲染步骤
- Spring Boot的启动器
- Android的第一次课_上课代码_上课实例_TextView控件_LinearLayout_gravity属性
- 解决jquery选择器id中带点的获取不到
- 设计模式—责任链模式(二十)
- 前端网站资源精编!!
- JAVA 封装的定义