全排列算法:
思路:使用递归,递归函数的接收两个参数,cur数组和rest数组
退出条件是cur数组中的数已经填充满了, 循环rest数组遍历所有能填充的情况
每次填充完一个数后要递归进去填充,填充完之后记得把数拿回原来的位置,以在下一次循环中使用
// 全排列
let arr = [1, 2, 3]
let cur = []
let r = []
let len = arr.length
function permutation(cur, rest) {
if (cur.length === len) {
r.push([...cur])
return
}
for (let i = 0; i < rest.length; i++) {
// 从rest中取出一个元素放到cur中
cur.push(rest[i])
rest.splice(i, 1)
// 向下执行
permutation(cur, rest)
// 将放进去的元素再拿回来
rest.splice(i, 0, cur.pop())
}
}
permutation(cur, arr)
console.log(r);