CreatePermutations [全排列]
# 介绍
排列(英语:Permutation,置换)是将相异物件或符号根据确定的顺序重排。每个顺序都称作一个排列。例如,从一到六的数字有 720 种排列,对应于由这些数字组成的所有不重复亦不阙漏的序列,例如 "4, 5, 6, 1, 2, 3" 与 1, 3, 5, 2, 4, 6。
# 实现
# JavaScript
/*
a permutation of a set is, loosely speaking, an arrangement of its members into a sequence or linear order, or if the set is already ordered, a rearrangement of its elements.
The word "permutation" also refers to the act or process of changing the linear order of an ordered set
More at : https://en.wikipedia.org/wiki/Permutation
*/
const createPermutations = (str) => {
// convert string to array
const arr = str.split("");
// get array length
const strLen = arr.length;
// this will hold all the permutations
const perms = [];
let rest;
let picked;
let restPerms;
let next;
// if strLen is zero, return the same string
if (strLen === 0) {
return [str];
}
// loop to the length to get all permutations
for (let i = 0; i < strLen; i++) {
rest = Object.create(arr);
picked = rest.splice(i, 1);
restPerms = createPermutations(rest.join(""));
for (let j = 0, jLen = restPerms.length; j < jLen; j++) {
next = picked.concat(restPerms[j]);
perms.push(next.join(""));
}
}
return perms;
};
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
34
35
36
37
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
34
35
36
37
- Object.create() (opens new window) 方法用于创建一个新对象,使用现有的对象来作为新创建对象的原型(prototype)。参见:Object.create ()、new Object () 和 {} 的区别 - 掘金 (opens new window)。
- splice() (opens new window) 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。
# 参考
编辑 (opens new window)
上次更新: 2022/10/20, 20:03:22