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 @   ˙鲨鱼辣椒ゝ  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示