問題は次のとおりです。
再帰的なバックトラッキングを使用して、指定されたリストの可能なすべてのサブリストを見つける静的メソッド サブセットを記述します。リスト L のサブリストには、L の要素が 0 個以上含まれています。メソッドは、文字列のリストをパラメーターとして受け入れ、そのリストの要素から作成できるすべてのサブリストを 1 行に 1 つずつ出力する必要があります。たとえば、list という変数に次の要素が格納されているとします。
[Janet, Robert, Morgan, Char]
サブセットの呼び出し(リスト); 次のような出力が生成されます。
[Janet, Robert, Morgan, Char]
[Janet, Robert, Morgan]
[Janet, Robert, Char]
[Janet, Robert]
[Janet, Morgan, Char]
[Janet, Morgan]
[Janet, Char]
[Janet]
[Robert, Morgan, Char]
[Robert, Morgan]
[Robert, Char]
[Robert]
[Morgan, Char]
[Morgan]
[Char]
[]
私のソリューションの一部では、再帰的なバックトラッキングを使用する必要があります。
ListIterator<String> itr = choices.listIterator();
while (itr.hasNext()) {
String word = itr.next();
chosen.add(word);
itr.remove();
subsets(choices, chosen, alreadyPrinted);
chosen.remove(word);
itr.add(word);
}
しかし、itr.add(word) がある行で ConcurrentModificationException を取得します。なんで?ListIterator の要点はその問題を回避することだと思いましたか?
編集:私もこのように解決しようとしました:
for (String word : choices) {
List<String> choicesCopy = choices;
chosen.add(word);
choicesCopy.remove(word);
subsets(choicesCopy, chosen, alreadyPrinted);
}
私はまだconcurrentmodificationexceptionを取得しています.... : (これはどうやって起こっているのですか?元のリストの変更はまったくありません.