Given a collection of integers that might contain duplicates, S, return all possible subsets.
Note:
For example,
If S = [1,2,2]
,
a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
public class Solution { public ArrayList<ArrayList<Integer>> subsetsWithDup(int[] num) { ArrayList<ArrayList<Integer>> results = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> result = new ArrayList<Integer>(); Arrays.sort(num); dfs(num,0,result,results); return results; } private void dfs(int[] num, int step, ArrayList<Integer> result, ArrayList<ArrayList<Integer>> results) { if(!results.contains(result)) results.add(new ArrayList<Integer>(result)); for(int i=step;i<num.length;i++){ result.add(num[i]); dfs(num, i+1, result, results); result.remove(result.size()-1); } } }
跟上题一样,可以2种方式加上去除重复。
第二种去重:
public class Solution { public ArrayList<ArrayList<Integer>> subsetsWithDup(int[] num) { ArrayList<ArrayList<Integer>> results = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> result = new ArrayList<Integer>(); Arrays.sort(num); dfs(num,0,result,results); return results; } private void dfs(int[] num, int step, ArrayList<Integer> result, ArrayList<ArrayList<Integer>> results) { results.add(new ArrayList<Integer>(result)); for(int i=step;i<num.length;i++){ if(i!=step&&num[i]==num[i-1]) continue; result.add(num[i]); dfs(num, i+1, result, results); result.remove(result.size()-1); } } }
leetcode JAVA Subsets II 4.26 难度系数4,布布扣,bubuko.com
leetcode JAVA Subsets II 4.26 难度系数4
原文:http://blog.csdn.net/yiding_he/article/details/20901825