小编F. *_*Guo的帖子

破解编码面试:为什么递归子集算法增加索引而不是减少索引?

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。这是打字错误还是我的理解不正确?

java algorithm recursion powerset

5
推荐指数
1
解决办法
839
查看次数

标签 统计

algorithm ×1

java ×1

powerset ×1

recursion ×1