排列

排列,一般地,从 n 个不同元素中取出 m(m≤n)个元素,按照一定的顺序排成一列,叫做从 n 个元素中取出 m 个元素的一个排列(permutation)。特别地,当 m=n 时,这个排列被称作全排列(all permutation)。

算法实现思路

此问题可以简化为每次从数组中提取出一个元素,再从剩余元素提取所需的 n-1 个元素

参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
* 排列问题可以简化为每次从数组中提取出一个元素
* 边界处理
* 1. 当只需要一个元素时返回这个元素的二维数组
* 2. 其它每次提取一个元素放到数组中即可
*/

function getData(arr, restLen) {
if (arr.length < restLen) {
return []
}
let result = []
for (let i = 0; i < arr.length; i++) {
const tempArr = arr.filter((ele, index) => i !== index)
let list = []
if (restLen <= 1) {
list = [[arr[i]]]
} else {
list = getData(tempArr, restLen - 1).map((item) => [arr[i], ...item])
}

result = [...result, ...list]
}
return result
}

const arr = [1, 2, 3, 4]
let list = []
for (let i = 1; i <= arr.length; i++) {
list = [...list, ...getData(arr, i)]
}

console.log('list', list, list.length)

参考