跳到主内容
UniKit

列表全排列

把列表的每一行当成一个元素,列出它们的全部排列(考虑顺序):默认排全部 n 项,也可以只排前 r 项(P(n,r));为防排列爆炸,输入最多 12 项、结果最多 20000 条,任一超过直接报错。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

列表(每行一项,最多 12 项)

排列结果

一行一种排列,最多 20000 行。

输入列表后即可列出全部排列

输入项数: 0 · 排列数: 0 · 每行项数: 0 · 结果上限: 0

这个工具能做什么

  • 排顺序:把若干任务列出所有先后顺序,人工挑出可行的那几种。
  • 穷举验证:对少量输入列出全部排列,用来对照算法输出。
  • 座位与轮值安排:小规模名单把所有座次排法列出来,再按约束筛掉不合适的。

示例

输入

苹果
香蕉
樱桃

输出

苹果香蕉樱桃
苹果樱桃香蕉
香蕉苹果樱桃
香蕉樱桃苹果
樱桃苹果香蕉
樱桃香蕉苹果

3 项共有 3! = 6 种排列,按字典序(先固定第一个位置)依次列出。

常见问题

最多能算多少排列?

输入最多 12 项、结果最多 20000 条,任一超过都会报错 `input-too-large`。排列数是 n!:8 项就有 40320 种,已经超过上限;12 项的全部排列有 4.79 亿种,所以必须拦住。

「取几项排列」怎么用?

填 0(默认)表示排列全部 n 项,共 n! 种;填 r 表示只排前 r 个位置,共 P(n,r) = n!/(n−r)! 种,例如 5 项取 2 项是 20 种。r 大于项数或为负数都会报错。

为什么有的行看起来重复?

只有输入里存在完全相同的行时才会这样——排列按位置枚举,不按内容去重。勾选「先去重」可以先压掉重复行,再排列。

输出顺序是随机的吗?

不是。结果按字典序生成:第一个位置先取输入第 1 项,再递归后面的位置,所以同样的输入永远得到同样的顺序。

关键词:列表全排列全排列permutationP(n,r)排列枚举所有排列顺序打乱顺序

同类工具