全排列-LeetCode#46

给定一个 没有重复 数字的序列,返回其所有可能的全排列。

示例:

输入: [1,2,3]
输出:
[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]

深度优先遍历+回溯算法

代码如下:

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permute = function(nums) {
    let len = nums.length;
    let res = [];
    if (len == 0) {
        return [];
    }
    let path = [];
    let used = new Array().fill(false);
    dfs(nums, len, 0, path, used, res);
    return res;
};

function dfs(nums, len, depth, path, used, res) {
    if(depth >= len) {
        res.push([...path]);
        return;
    }
    for (let i = 0; i < len; i++) {
        if (used[i]) {
            continue;
        }
        path.push(nums[i]);
        used[i] = true;
        dfs(nums, len, depth + 1, path, used, res);
        path.pop();
        used[i] = false;
    }
}

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注