1 public class Solution {
2 public ArrayList<ArrayList<Integer>> subsetsWithDup(int[] num) {
3 // IMPORTANT: Please reset any member data you declared, as
4 // the same Solution instance will be reused for each test case.
5 ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
6 ArrayList<Integer> list = new ArrayList();
7 if(num == null)
8 return result;
9 Arrays.sort(num);
10 generate(num, 0, result, list);
11 return result;
12 }
13
14 private void generate(int[] num, int start, ArrayList<ArrayList<Integer>> result, ArrayList<Integer> list){
15 ArrayList<Integer> tmp = new ArrayList<Integer>();
16 tmp.addAll(list);
17 result.add(tmp);
18
19 for(int i = start; i < num.length; i++){
20 if(i == start || (i > start && num[i] != num[i-1])){
21 list.add(num[i]);
22 generate(num, i+1, result, list);
23 list.remove(list.size()-1);
24 }
25 }
26 }
27 }