【发布时间】:2012-03-13 11:42:21
【问题描述】:
我正在编写这个函数,我想用整数打印给定列表的所有子列表。这些整数之和应等于给定数字n。还有一个帮助变量i,它以值0 开头。列表和每个子列表都是ArrayList。所以这个方法现在看起来像这样:
public static void printSublists(ArrayList numbers, ArrayList sublist, int n,
int i) {
if (sublist.sum() == n) {
System.out.println(sublist.toString());
}
else {
for (int j = 0; j < numbers.size(); j++) {
sublist.add(numbers.get(i));
printSublists(numbers, sublist, n, i + 1);
sublist.remove(numbers.get(i));
}
}
}
当然我已经有了方法sum()。该方法现在执行此操作:
假设numbers = [1, 3 , 4] 和n == 4,那么该方法应该打印[4] 和[1 ,3],但它只打印[1, 3]?我认为 for 循环必须做到这一点,对吗?如果有人让我走上正轨,我将不胜感激。
更新: 我赋予该方法的值:
numbers = [1, 3, 4]
n = 4
i = 0
sublist = []
更新 2:
我忘了说我希望它是递归的:)
【问题讨论】:
-
这个页面有一个通用算法:en.wikipedia.org/wiki/Subset_sum_problem
-
这一定是维基百科上最糟糕的一页:)
标签: java recursion backtracking subset-sum