(lintcode)第18题 带重复元素的子集
2017-09-05 17:38
393 查看
要求:
给定一个可能具有重复数字的列表,返回其所有可能的子集
注意事项
子集中的每个元素都是非降序的
两个子集间的顺序是无关紧要的
解集中不能包含重复子集
样例
如果 S =
给定一个可能具有重复数字的列表,返回其所有可能的子集
注意事项
子集中的每个元素都是非降序的
两个子集间的顺序是无关紧要的
解集中不能包含重复子集
样例
如果 S =
[1,2,2],一个可能的答案为:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
思路:可以看这篇http://blog.csdn.net/aphysia/article/details/77849042,只是更改一部分,取出list的循环控制条件是改成为列表的大小,然后加入的时候,要判断列表里面是不是已经含有这个元素,要是已经有,则不加进去,否则,要加进去。代码如下:
public class Solution { /* * @param nums: A set of numbers. * @return: A list of lists. All valid subsets. */ public List<List<Integer>> subsetsWithDup(int[] nums) { ArrayList<List<Integer>> res=new ArrayList<List<Integer>>(); ArrayList<Integer>list=new ArrayList<Integer>(); if(nums==null ){ return res; } res.add(list); Arrays.sort(nums); for(int i=0;i<nums.length;i++){ int size=res.size(); for(int j=0;j<size;j++){ List<Integer>temp=res.get(0); res.remove(0); ArrayList<Integer>temp2=new ArrayList<Integer>(temp); temp2.add(temp2.size(),nums[i]); if(!res.contains(temp2)) res.add(temp2); if(!res.contains(temp)) res.add(temp); } } return res; } }
相关文章推荐
- LintCode 18-带重复元素的子集 JAVA
- lintcode 中等题:subsets II 带重复元素的子集
- lintcode-18-带重复元素的子集
- LintCode笔记(11)—— 带重复元素的子集
- LintCode 18. 带重复元素的子集
- LintCode 18 带重复元素的子集
- lintcode---子集(带重复元素和不带重复元素的两种解法)
- lintcode-带重复元素的子集-18
- 删除排序链表中的重复元素-LintCode
- lintcode ----删除排序链表中的重复元素
- lintcode(16)带重复元素的排列
- 子集生成之增量构造法(允许有重复元素)
- 面试题: 已知一个含有n个不同元素的集合,要求打印其所有具有k个元素的子集(不允许有重复的)
- 带重复元素的子集
- 删除排序链表中的重复元素-LintCode
- 二进制法枚举无重复元素子集
- LintCode-删除排序链表中的重复元素
- 集合中的子集2(含有重复元素)
- ***[Lintcode]Permutations II 带重复元素的排列 递归/非递归解法
- LintCode 15-全排列 16-带重复元素的全排列