博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Subsets II -- LeetCode
阅读量:6609 次
发布时间:2019-06-24

本文共 1624 字,大约阅读时间需要 5 分钟。

原题链接: 

这道题跟一样是经典的--求子集。

略微复杂一些的是这里的集合中可能出现反复元素,因此我们在求子集的时候要避免出现反复的子集。

中我们每次加进一个元素就会把原来的子集都加上这个元素,然后再增加到结果集中。可是这样反复的元素就会产生反复的子集。为了避免这种反复,须要用个小技巧。

事实上比較简单,就是每当遇到反复元素的时候我们就仅仅把当前结果集的后半部分加上当前元素增加到结果集中,由于后半部分就是上一步中增加这个元素的全部子集,上一步这个元素已经增加过了。前半部分假设再加就会出现反复。

所以算法上复杂度上没有提高,反而少了一些操作,就是遇到反复时少做一半。只是这里要对元素集合先排序。否则不好推断反复元素。相同的还是能够用递归和非递归来解,只是对于反复元素的处理是一样的。

递归的代码例如以下:

public ArrayList
> subsetsWithDup(int[] num) { if(num == null) return null; Arrays.sort(num); ArrayList
lastSize = new ArrayList
(); lastSize.add(0); return helper(num, num.length-1, lastSize);}private ArrayList
> helper(int[] num, int index, ArrayList
lastSize){ if(index == -1) { ArrayList
> res = new ArrayList
>(); ArrayList
elem = new ArrayList
(); res.add(elem); return res; } ArrayList
> res = helper(num,index-1,lastSize); int size = res.size(); int start = 0; if(index>0 && num[index]==num[index-1]) start = lastSize.get(0); for(int i=start;i
elem = new ArrayList
(res.get(i)); elem.add(num[index]); res.add(elem); } lastSize.set(0,size); return res;}
非递归的代码例如以下:
public ArrayList
> subsetsWithDup(int[] num) { ArrayList
> res = new ArrayList
>(); res.add(new ArrayList
()); if(num==null || num.length==0) return res; Arrays.sort(num); int start = 0; for(int i=0;i
newItem = new ArrayList
(res.get(j)); newItem.add(num[i]); res.add(newItem); } if(i
这样的
的反复处理在LeetCode有一定出现频率,比方还有
也是这种,事实上本质就是当一个反复元素进来时忽略上一个元素已经有的结果,仅仅考虑由反复元素所产生的新结果。

转载地址:http://hjiso.baihongyu.com/

你可能感兴趣的文章
浅谈JS-cookie,你是香甜可口的小点心吗?
查看>>
SpringBoot注解
查看>>
JS输出处理---H_scrit.php
查看>>
线程的挂起,唤醒和终止
查看>>
WCF 第五章 行为 实现事务(操作行为)
查看>>
我的Android进阶之旅------>Android之Animations动画详解
查看>>
802.11 af 要点
查看>>
openwrt 分区
查看>>
BuildFilePath 及打开文件对话框
查看>>
Leetcode 561. Array Partition I(easy)
查看>>
session多服务器共享的方案梳理
查看>>
css定位
查看>>
OriginPro 9.1 科研图标绘制入门
查看>>
SQL操作
查看>>
AngularJS的Filter用法详解
查看>>
Map集合学习
查看>>
Algs4-2.2.7证明归并排序的比较次数是单调递增的
查看>>
URL 参数获取
查看>>
“用户故事”来做展会——敏捷嘉年华(敏捷之旅2012上海站)经验分享
查看>>
获取坐标封装 getPos
查看>>