[LeetCode] 90. Subsets II
来源:互联网 发布:聊天室软件开发 编辑:程序博客网 时间:2024/06/04 00:48
【原题】
Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,2], a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], []]
【解释】
作为Subsets一题的follow up,要求在给定序列有重复元素的情况下求出所有子集。
【思路】
在这里,由于元素互异,所有可以不排序。但在有重复元素的情况下,由于重复的元素有可能不在一块,所以一定要排序。基本的思路为不重复添加已经添加过得子集:
比如给定序列{1,2,2}
初始化:{{}}
第一次:{{},{1}}
第二次:{{},{1},{2},{1,2}}
第三次:{{},{1},{2},{1,2}},遇到重复的元素,加粗的子集是上一个2添加形成的,当再次遇到2时,需要添加到之前2没有添加的子集即加粗的部分。最终形成{{},{1},{2},{1,2},{2,2},{1,2,2}}
public class Solution { public List<List<Integer>> subsetsWithDup(int[] nums) { List<List<Integer>> results=new ArrayList<List<Integer>>(); results.add(new ArrayList<Integer>()); int preEnd=0; Arrays.sort(nums);//必须排序 for(int i=0;i<nums.length;i++){ int n=results.size(); int start; if(i>0&&nums[i]==nums[i-1]) start=preEnd;//若有重复,则不重复添加已经添加过的子集,从preEnd开始添加 else start=0; List<Integer> tmp = null; for(int j=start;j<n;j++){ tmp=new ArrayList<>(results.get(j)); tmp.add(nums[i]); results.add(tmp); } preEnd=n; } return results; }}
也可以使用之前的方法,然后在加入集合的时候,判断该子集是否在集合当中,这孩子能够方法效率不高,且和Subsets类似这里不再赘述。
阅读全文
0 0
- [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
- leetcode 90. Subsets II
- [LeetCode] 90. Subsets II
- [leetcode] 90. Subsets II
- [leetcode]90. Subsets II
- Leetcode-90. Subsets II
- [LeetCode]90. Subsets II
- 面试题7:用两个栈实现队列
- elasticsearch5.4.1 安装
- Android笔记(七)SystemUI通知栏框架
- RecylerView的基本使用(个人备忘录)
- C++中的lower_bound()与upper_bound()
- [LeetCode] 90. Subsets II
- 高级控件ViewPager
- 数据结构学习方法
- imwrite用法(opencv存图像)
- 关于时间的所有说明: Date DateComponents Calendar DateFormatter IOS Swift 3.0
- 未解决的错误
- 操作系统移动臂调度算法
- Web开发基础--如何访问WEB-INF目录下的jsp文件
- #5 重定向