排列(也称为“排列编号”或“顺序”)是将有序列表S的元素重新排列为与S本身一一对应的关系。长度为n的字符串为n!排列(来源:Mathword)
以下是字符串ABC的排列。
ABC ACB BAC BCA CBA CAB
我们在这里和这里讨论了不同的递归方法来打印排列。
如何迭代打印所有排列?
一个简单的解决方案,使用n-1个元素的置换来生成n个元素的置换。
例如,让我们看看如何使用大小为2的排列来生成大小为3的排列。
两个元素的排列是1 2和2 1。
可以通过在大小为2的所有排列的不同位置插入3来获得三个元素的排列。
将3插入1 2的不同位置会导致1 2 3、1 3 2和3 1 2。
将3插入2 1的不同位置会导致2 1 3、2 3 1和3 2 1。
为了生成大小为4的排列,我们考虑大小为3的所有六个以上排列,并在每个排列的不同位置插入4。
一个有效的解决方案是使用Johnson和Trotter算法来迭代生成所有排列。
Johnson和Trotter算法