public class Solution { public ArrayList<ArrayList<Integer>> subsets(int[] S) { ArrayList<Integer> list = new ArrayList<Integer>(); sub(S,0,list); return all; } static ArrayList<ArrayList<Integer>> all = new ArrayList<ArrayList<Integer>>(); public void sub(int[] S,int index,ArrayList<Integer> list){ if(index==S.length){ ArrayList<Integer> res = new ArrayList<Integer>(list); all.add(res); return; } sub(S,index+1,list); list.add(S[index]); sub(S,index+1,list); list.remove(list.size()-1); } }