遇到一些麻煩這個遞歸回溯問題:Java的遞歸回溯問題
「寫的方法分區接受整數作爲參數的列表,並使用遞歸回溯,發現清單是否可以被劃分爲兩個如果給定列表可以被平等分割,那麼你的方法應該返回true,否則返回false。「
例如,列表[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;
}
編輯:我解決了從列表1中刪除元素兩次的問題。
謝謝,我忽略了那個 – hello253