在Cracking the Coding Interview, 6th Edition 的第 8 章中,有一个寻找所有子集的问题,这是给定的解决方案:
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;
}
Run Code Online (Sandbox Code Playgroud)
据我了解,我需要将当前元素添加到为给定集合中的前一个元素找到的所有子集。我不明白为什么递归调用需要index+1作为给定参数,而不是index-1。这是打字错误还是我的理解不正确?