1 public class Solution { 2 public ArrayList<ArrayList<Integer>> subsets(int[] S) { 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<Integer>(); 7 Arrays.sort(S); 8 generate(result, list, S, 0, S.length); 9 return result; 10 } 11 12 private void generate(ArrayList<ArrayList<Integer>> result, ArrayList<Integer> list, int[] S, int depth, int length) 13 { 14 result.add(list); 15 if(depth == length) 16 return; 17 for(int i = depth; i < length; i++) 18 { 19 ArrayList<Integer> tmp = new ArrayList<Integer>(); 20 tmp.addAll(list); 21 tmp.add(S[i]); 22 generate(result, tmp, S, i+1, length); 23 } 24 } 25 }