问题如下:
编写一个静态方法子集,该方法使用递归回溯来查找给定列表的每个可能的子列表。列表 L 的子列表包含 L 的 0 个或多个元素。您的方法应该接受一个字符串列表作为其参数,并打印可以从该列表的元素创建的每个子列表,每行一个。例如,假设一个名为 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);
}
我仍然得到一个并发修改异常...... :(这是怎么回事?根本没有修改原始列表......