public class Solution {
public ArrayList<ArrayList<Integer>> subsets(int[] S) {
if(S == null){
return null;
}
// int n = S.length;
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
// result.add(new ArrayList<Integer>());
// for(int i = 0;i < n;i++){
// int size = result.size();
// for(int j = 0;j< size;j ++){
// ArrayList<Integer> path = new ArrayList<Integer>();
// path.addAll(result.get(j));
// path.add(S[i]);
// result.add(path);
// }
// }
// return result;
for(int i = 0;i <= S.length ; i++){
back(i,0, new ArrayList<Integer>(), result, S);
}
return result;
}
private void back(int k , int start, ArrayList<Integer> list, ArrayList<ArrayList<Integer>> result, int[] S){
if(k < 0){
return;
}else if(k == 0){
result.add(new ArrayList<>(list));
}else{
for(int i = start; i < S.length;i++){
list.add(S[i]);
back(k - 1, i + 1, list ,result, S);
list.remove(list.size() - 1);
}
}
}
}