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], [] ]
解题思路: 跟subset 基本一样,就是多加一条判断重复,如果有重复, i++;
public class Solution { public ArrayList<ArrayList<Integer>> subsetsWithDup(int[] num) { Arrays.sort(num); ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> output = new ArrayList<Integer>(); generate(0, num.length, num, output, result); return result; } public void generate(int depth, int len, int[] num, ArrayList<Integer> output, ArrayList<ArrayList<Integer>> result){ result.add(output); if(depth == len) return; for(int i = depth; i < len; i++){ ArrayList<Integer> tmp = new ArrayList<Integer>(); tmp.addAll(output); tmp.add(num[i]); generate(i+1, num.length, num, tmp, result); while(i+1 < len && num[i] == num[i+1] ){ i++; } } } }
原文:http://www.cnblogs.com/RazerLu/p/3548000.html