JS递归实现全排列

2021年11月07凌晨,恭喜EDG夺冠,S11终加冕成王!!!
image

言归正传,研究一下用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数组也即是全排列的一种情况。
image

代码如下:

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)];    //去重
}
posted @ 2021-11-09 09:41  这个少年有点热丶  阅读(291)  评论(0编辑  收藏  举报