这个递归回溯问题遇到了一些麻烦:
“编写一个可分区的方法,该方法接受整数列表作为参数并使用递归回溯来发现列表是否可以划分为两个相等和的子列表。如果给定的列表可以平均分区,则您的方法应该返回 true,并且如果不是,则为假。”
例如,列表 [1, 2, 3] 可以划分为子列表 [1, 2] 和 [3],因此它会产生“真”的结果。
我的解决方案似乎是正确的,但无论如何都会返回 false。我不明白为什么。
public static boolean partitionable(List<Integer> list1) {
List<Integer> list2 = new ArrayList<Integer>();
return partitionable(list1, list2);
}
public static boolean partitionable(List<Integer> list1, List<Integer> list2) {
boolean finalAnswer = false;
int sum1 = 0;
int sum2 = 0;
for (int i = 0; i < list1.size(); i++) {
sum1 += list1.get(i);
}
for (int i = 0; i < list2.size(); i++) {
sum2 += list2.get(i);
}
if (sum1 == sum2) {
return true;
} else {
for (int i = 0; i < list1.size() - 1; i++) {
int number = list1.remove(i);
list2.add(number);
finalAnswer = partitionable(list1, list2);
list2.remove(list2.size() - 1);
list1.add(i, number);
}
}
return finalAnswer;
}
编辑:我解决了从 list1 中删除元素两次的问题。