(js)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 res = [], track = [];
    backtrack(res, nums, track);
    return res;
};

var backtrack = function(res, nums, track) {
    // 触发结束条件
    if (track.length == nums.length) {
        return res.push([...track]);;
    }
    for (let i = 0; i < nums.length; i++) {
        // 排除不合法的选择
        if (track.includes(nums[i])) continue;
        // 做选择
        track.push(nums[i]);

        // 进入下一层决策树
        backtrack(res, nums, track);
        // 取消选择
        track.pop();
    }
}

运行结果:

猜你喜欢

转载自blog.csdn.net/M_Eve/article/details/113763794