は、この再帰的なバックトラッキングの問題といくつかの問題を持つ:Javaの再帰的なバックトラックの問題
「のパラメータとしての整数のリストを受け取り、リストを2つに分割することができるかどうかを発見するために、再帰的なバックトラックを使用していますパーティション化方法を書きます指定されたリストを等しく分割できる場合は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;
}
EDIT:list1から要素を2回削除するという問題を修正しました。
ありがとう、私はそれを見落とした – hello253