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

本文介绍了一种处理含重复数字列表并生成所有可能子集的算法。通过确保子集内部及整个解集的唯一性,避免了重复结果的出现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要求:

 

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

 注意事项

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

如果 S = [1,2,2],一个可能的答案为:

[
  [2],
  [1],
  [1,2,2],
  [2,2],
  [1,2],
  []
]
思路:可以看这篇http://blog.youkuaiyun.com/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; } }

如果有所帮助,脸皮厚求个赞~

此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~

技术之路不在一时,山高水长,纵使缓慢,驰而不息。

公众号:秦怀杂货店

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值