计算一组数字的所有子集
我想找到一组整数的子集。这是具有回溯的“子集之和”算法的第一步。我已经编写了以下代码,但它没有返回正确的答案:
BTSum(0, nums);
///**************
ArrayList<Integer> list = new ArrayList<Integer>();
public static ArrayList<Integer> BTSum(int n, ArrayList<Integer> numbers) {
if (n == numbers.size()) {
for (Integer integer : list) {
System.out.print(integer+", ");
}
System.out.println("********************");
list.removeAll(list);
System.out.println();
} else {
for (int i = n; i < numbers.size(); i++) {
if (i == numbers.size() - 1) {
list.add(numbers.get(i));
BTSum(i + 1, numbers);
} else {
list.add(numbers.get(i));
for (int j = i+1; j < numbers.size(); j++)
BTSum(j, numbers);
}
}
}
return null;
}
例如,如果我想计算 set = {1, 3, 5} 的子集,我的方法的结果是:
1, 3, 5, ********************
5, ********************
3, 5, ********************
5, ********************
3, 5, ********************
5, ********************
我希望它产生:
1, 3, 5
1, 5
3, 5
5
我认为问题出在零件清单上。但我不知道如何纠正它。