排列 (Permutation / Arrangement)
概念
n 个不同元素中任意选取 m (m <= n) 个元素进行排列,所有排列情况的个数叫做 排列数,其值等于:
1 | A = n! / (n - m)! |
!
表示数学中的阶乘运算符,可以通过以下函数实现:
1 | function factorial(n) { |
当 n = m 时,称为 全排列,其值等于:
1 | A = n! |
全排列:
[1, 2, 3] => [
[1, 2, 3],
[1, 3, 2],
[2, 1, 3],
[2, 3, 1],
[3, 1, 2],
[3, 2, 1]
]
共 6 种情况
树状图表示:
1 2 3
/ \ / \ / \
2 3 1 3 1 2
| | | | | |
3 2 3 1 2 1 => 6
3 个元素中选取 2 个时:(n = 3, m = 2)
[1, 2, 3] => [
[1, 2],
[1, 3],
[2, 1],
[2, 3],
[3, 1],
[3, 2]
]
共 6 种情况
树状图表示:
1 2 3
/ \ / \ / \
2 3 1 3 1 2 => 6
1 |
|
最终实现函数就是 permutation(a, m)
,其中参数 a
为输入数组,包含需要排列的所有元素,参数 m
为选取需要排列的个数,默认等于输入数组的长度,即默认全排列,注意 m
不能大于元素个数;
拓展
以上函数输出值为一个二维数组,如果需要便于观察,输出一个一维数组,可以定义一个合并函数:
1 | function merge(arr) { |