Mooo-star / fe-algorithm

0 stars 0 forks source link

全排列 II #25

Open Mooo-star opened 2 months ago

Mooo-star commented 2 months ago

给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。

示例 1:

输入:nums = [1,1,2] 输出: [[1,1,2], [1,2,1], [2,1,1]]

示例 2:

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

Mooo-star commented 2 months ago
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permuteUnique = function (nums) {
    const len = nums.length;
    const result = [];
    const set = new Set()
    function backtrack(used, path) {
        if (path.length === len) {

            if(set.has(path.toString())){
                return 
            }
            set.add(path.toString())

            result.push(path)
            return
        }

        for (let i = 0; i < len; i++) {
            if (used[i]) continue

            used[i] = true
            backtrack(used, [...path, nums[i]])
            used[i] = false
        }

    }

    backtrack([], [])

    return result
};
Mooo-star commented 2 months ago
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permuteUnique = function (nums) {
    const len = nums.length;
    const result = [];
    nums.sort((a, b) => a - b)

    function backtrack(used, path) {
        if (path.length === len) {
            result.push(path)
            return
        }

        for (let i = 0; i < len; i++) {
            if (i > 0 && nums[i] === nums[i - 1] && !used[i - 1]) {
                continue
            }

            if (used[i]) continue;

            used[i] = true
            backtrack(used, [...path, nums[i]])
            used[i] = false

        }

    }

    backtrack([], [])

    return result
};