46. 全排列

题目描述:

  给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

提示:

  • 1 <= nums.length <= 6
  • -10 <= nums[i] <= 10
  • nums 中的所有整数 互不相同

 

解题思路:

  

 

 

let permute = function(nums) {
        let ans = [[nums[0]]];  //初始化ans数组
        for(let i=1;i<nums.length;i++){  //从第二个元素开始依次插入
            let n = nums[i];  
            let l = ans.length;  //保存当前ans数组长度,防止后面push时改变ans长度导致循环继续
            for(let j=0;j<l;j++){ 
                let arr = ans.shift();   
                let len = arr.length; 
                for(let k=0;k<=len;k++){ //k表示插入位置,长度为len的序列,可插入位置有len+1个
                    let temp = Array.from(arr);  //复制取出来的arr数组,因为要对arr进行不同位置的插入,从而生成新的temp数组,arr需要重复利用
                    temp.splice(k,0,n);
                    ans.push(temp);
                }
            }
        }
        return ans;
};

 

posted @ 2022-03-16 21:50  ˙鲨鱼辣椒ゝ  阅读(47)  评论(0)    收藏  举报