博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Subset II leetcode java
阅读量:6859 次
发布时间:2019-06-26

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

题目

Given a collection of integers that might contain duplicates, S, return all possible subsets.

Note:

  • Elements in a subset must be in non-descending order.
  • The solution set must not contain duplicate subsets.

For example,

If S = [1,2,2], a solution is:

[  [2],  [1],  [1,2,2],  [2,2],  [1,2],  []] 题解: 这个在subset题的第一种解法的基础上有两种解决办法。。 1. 在添加res时候判断是否res中已经存过该item了。没存过的才存保证子集唯一性。  代码如下:
 1 
public 
static 
void dfs(
int[] S, 
int start, 
int len, ArrayList<Integer> item,ArrayList<ArrayList<Integer>> res){
 2         
if(item.size()==len){
 3             
if(!res.contains(item))
 4                 res.add(
new ArrayList<Integer>(item));
 5             
return;
 6         }
 7         
for(
int i=start; i<S.length;i++){
 8             item.add(S[i]);
 9             dfs(S, i+1, len, item, res);
10             item.remove(item.size()-1);
11         }
12 
13     }
14     
15     
public 
static ArrayList<ArrayList<Integer>> subsetsWithDup(
int[] S) {
16         ArrayList<ArrayList<Integer>> res = 
new ArrayList<ArrayList<Integer>> ();
17         ArrayList<Integer> item = 
new ArrayList<Integer>();
18         
if(S.length==0||S==
null)
19             
return res;
20         
21         Arrays.sort(S);
22         
for(
int len = 1; len<= S.length; len++)
23             dfs(S,0,len,item,res);
24             
25         res.add(
new ArrayList<Integer>());
26         
27         
return res;
28     }
2. 还有一种方法就是在DFS过程中 当有重复元素出现就只对当前这个元素走一起,其他重复元素跳过。参考:http://blog.csdn.net/worldwindjp/article/details/23300545 代码如下:
 1 
public 
static 
void dfs(
int[] S, 
int start, 
int len, ArrayList<Integer> item,ArrayList<ArrayList<Integer>> res){
 2         
if(item.size()==len){
 3             res.add(
new ArrayList<Integer>(item));
 4             
return;
 5         }
 6         
for(
int i=start; i<S.length;i++){
 7             item.add(S[i]);
 8             dfs(S, i+1, len, item, res);
 9             item.remove(item.size()-1);
10             
while(i<S.length-1&&S[i]==S[i+1])
//
跳过重复元素
11 
                i++;
12         }
13 
14     }
15     
16     
public 
static ArrayList<ArrayList<Integer>> subsetsWithDup(
int[] S) {
17         ArrayList<ArrayList<Integer>> res = 
new ArrayList<ArrayList<Integer>> ();
18         ArrayList<Integer> item = 
new ArrayList<Integer>();
19         
if(S.length==0||S==
null)
20             
return res;
21         
22         Arrays.sort(S);
23         
for(
int len = 1; len<= S.length; len++)
24             dfs(S,0,len,item,res);
25             
26         res.add(
new ArrayList<Integer>());
27         
28         
return res;
29     }       
 

你可能感兴趣的文章
svn简单介绍
查看>>
hbase region still in transition
查看>>
CSS Flex布局属性整理
查看>>
【struts2】中method={1}具体解释
查看>>
Android Studio 函数使用方法提示 快捷键
查看>>
构建自己的PHP框架--构建模版引擎(2)
查看>>
vue28-2.0-过滤器
查看>>
Cocos2d-x 多点触摸
查看>>
MySql按周/月/日分组统计数据的方法
查看>>
自定义控件_VIewPager显示多个Item
查看>>
2015年年尾总结
查看>>
UI组件之AdapterView及其子类(五)ListView组件和ListActivity
查看>>
Linux编程之select
查看>>
数据库表设计--备份记录的表设计优化
查看>>
小谈业务应用架构
查看>>
JWPlayer Uncaught Error: Invalid SRT file
查看>>
mysql使用GROUP BY分组实现取前N条记录的方法
查看>>
web项目log日志查看分析->流程理解
查看>>
无线路由器连接电信光猫实现拨号上网方法
查看>>
nyoj 题目10 skiing —— 南阳oj
查看>>