leetcode 46. 全排列 javascript

给定数组[1,2,3,4]
策略是把所有元素分别提到最前面,进行剩下的数组的全排列
1 + [2,3,4] 的全排列
2 + [1,3,4] 的全排列
3 + [1,2,4] 的全排列
4 + [1,2,3] 的全排列
然后分别将[2,3,4]递归的排列下去2 + [3,4]的全排列,直至遍历完

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var swap = function(nums, i, j) {
    let tmp = nums[i];
    nums[i] = nums[j];
    nums[j]  = tmp;
}

var dfs = function(result, nums, start) {
    //出口条件
    if (start === nums.length) {
        result.push([...nums]);
    }

    for (let i = start; i < nums.length; i++) {
        swap(nums, start, i); //剩余数组中的元素,分别于剩余数组中第一个元素,交换,那么剩下的进行递归的全排列; 剩余数组会逐渐减小至没有
        dfs(result, nums, start + 1);
        //交换回来,因为在dfs嵌套中,序列是被改变了的,所以,在返回到外一层嵌套的时候,需要将数组复位
        swap(nums, start, i);      
        
    }
}

var permute = function(nums) {
    let result = [];
    dfs(result, nums, 0);
    return result;
};

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容