n个数字的排列

时间:2012-09-22 07:35:43

标签: java algorithm permutation combinatorics

我需要为数字列表生成所有排列。数字列表将从1到n。排列的大小也可以是1到m。因此,如果给定n = 4,m = 3,我需要进行排列:

111
112
113
114
121
122
123
124
131
132
133
134
142
142
143
144
211.....

依旧......

还应该使用哪种递归/迭代?为什么?

1 个答案:

答案 0 :(得分:0)

这是一个算法,它以词汇顺序从前一个返回下一个排列:

  1. 找到最大的索引k,使得a [k]< a [k + 1]。如果不存在这样的索引,则排列是最后的排列。
  2. 找到最大的索引l,使得a [k]&lt;一个[1]。由于k + 1是这样的指数,因此l被很好地定义并且满足k <1。湖
  3. 用[l]交换[k]。
  4. 将序列从[k + 1]反转到最后一个元素a [n]。
  5. 尝试实施它。