Возникли проблемы с рекурсивной проблемой возврата:
"Напишите метод partitionable , который принимает список целых чисел в качестве параметра и использует рекурсивный возврат, чтобы определить, можно ли разделить список на два подсписка равной суммы. Ваш метод должен возвращать true, если данный список может быть разделен поровну, а если нет - false. "
Например, список [1, 2, 3] можно разбить на подсписки [1, 2] и [3], так что он выдаст результат «true».
Мое решение кажется правильным, но возвращает ложь, несмотря ни на что. Я не понимаю почему.
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 дважды.