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 }