JS递归实现全排列
2021年11月07凌晨,恭喜EDG夺冠,S11终加冕成王!!!
言归正传,研究一下用JS实现一下全排列。
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
如果有m个元素,全排列的可能方式有m!种,即3个元素,有3*2*1=6种。4个元素有4*3*2*1=24种。
怎么用算法实现呢,我们可以参照下图,遍历整个数组,取出遍历的元素,放到一个temp数组中,然后把剩余元素递归地继续去做遍历,继续取出元素放到temp中,最后当temp中的元素与原数组长度相同时候,递归结束,temp数组也即是全排列的一种情况。
代码如下:
var parenthesis = (arr)=>{
let len = arr.length;
let result = [];
(function handler(temp, remaind){
if(temp.length == len) result.push(temp.join("")); //最后得到的结果是一个字符串数组
remaind.forEach((item, index) => {
let cur = [...remaind];
cur.splice(index, 1);
handler(temp.concat(item), cur);
});
})([], arr)
return [...new Set(result)]; //去重
}