【问题标题】:Permutation of n numbers [closed]n个数的排列[关闭]
【发布时间】:2012-09-22 07:35:43
【问题描述】:

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

等等……

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

【问题讨论】:

  • 这不是排列 - 排列没有重复。另外 - 这几乎是 this thread 的私人案例
  • 还没有尝试..我不知道:(
  • @V.J. - 抱歉,但您必须先自己尝试一下。如果您真的没有头绪,我们为您提供您不会理解的答案是没有意义的。
  • 更不用说在 SO 上搜索“Java permutation numbers”会返回相当多的有希望的线索......

标签: java algorithm permutation combinatorics


【解决方案1】:

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

  1. 找到最大的索引 k 使得 a[k]
  2. 找到最大的索引 l 使得 a[k]
  3. 将 a[k] 与 a[l] 交换。
  4. 反转从 a[k + 1] 到最后一个元素 a[n] 的序列。

尝试实现它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2018-03-10
    相关资源
    最近更新 更多