In chapter 8 of Cracking the Coding Interview, 6th Edition, there's a question for finding all the subsets, and this is the given solution:
Arraylist<Arraylist<Integer>> getSubsets(Arraylist<Integer> set, int index) {
Arraylist<Arraylist<Integer>> allsubsets;
if (set.size()== index) {//Base case - add empty set
allsubsets = new Arraylist<Arraylist<Integer>>();
allsubsets.add(new Arraylist<Integer>()); // Empty set
} else {
allsubsets = getSubsets(set, index+ 1);
int item = set.get(index);
Arraylist<Arraylist<Integer>> moresubsets = new Arraylist<Arraylist<Integer>>();
for (Arraylist<Integer> subset : allsubsets) {
Arraylist<Integer> newsubset = new Arraylist<Integer>();
newsubset.addAll(subset);
newsubset.add(item);
moresubsets.add(newsubset);
}
allsubsets.addAll(moresubsets);
}
return allsubsets;
}
To my understanding, I need to add the current element to all the subsets found for the previous element from the given set. I don't understand why the recursive call takes index+1
as a given parameter instead of index-1
. Is this a typo or is my understanding incorrect?