您的位置:首页 > 编程语言 > Java开发

(lintcode)第18题 带重复元素的子集

2017-09-05 17:38 393 查看
要求:

给定一个可能具有重复数字的列表,返回其所有可能的子集


 注意事项


子集中的每个元素都是非降序的
两个子集间的顺序是无关紧要的
解集中不能包含重复子集

样例

如果 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;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 java lintcode 子集