-1

我需要为数字列表生成所有排列。数字列表将从 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.....

等等..

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

4

1 回答 1

0

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

  1. 找到满足 a[k] < a[k + 1] 的最大索引 k。如果不存在这样的索引,则排列是最后一个排列。
  2. 找到最大的索引 l 使得 a[k] < a[l]。由于 k + 1 是这样一个索引,所以 l 是很好定义的并且满足 k < l。
  3. 将 a[k] 与 a[l] 交换。
  4. 反转从 a[k + 1] 到最后一个元素 a[n] 的序列。

尝试实施它。

于 2012-09-22T08:14:01.920 回答