1

我正在为我正在研究的一些研究编写一些 java 代码,并且需要有一种方法来迭代 ArrayList 的所有排列。我已经查看了这里提出的一些以前的问题,但大多数都不是我想要做的,并且接近的问题有处理字符串和用 Perl 编写的示例代码的答案,或者在一个似乎实现的情况下就像它会工作......实际上并不工作。

理想情况下,我正在寻找提示/代码片段来帮助我编写一个函数 permute(list, i),当 i 从 0 变为 list.size() 时!给了我 ArrayList 的每一个排列。

4

2 回答 2

6

有一种从 0 计数到 (n! - 1) 的方法,它将列出 n 个元素列表的所有排列。这个想法是使用阶乘数字系统重写数字,并将数字解释为确定使用哪种排列的编码方式。如果你对此感到好奇,我有这个算法的 C++ 实现。我也曾经讨论过这个,以防你想要一些关于这个话题的视觉效果。

希望这可以帮助!

于 2012-08-15T20:00:42.940 回答
3

如果迭代所有排列对您来说就足够了,请参阅以下答案:Stepping through all permutations one swap at time。对于一个给定的迭代器产生所有的n数字排列。您可以简单地将其包装到另一个迭代器中,该迭代器将数字的排列转换为数组元素的排列。(请注意,您不能只在迭代器中用任意数组/列表替换。该算法需要使用数字。)0(n-1)int[]

于 2012-08-15T20:10:49.730 回答