JavaScript-全配列2(遡及法)

725 ワード

重複した数を含むことができるシーケンスを指定して、重複しない全配置を返します.例:
  : [1,1,2]
  :
[
 [1,1,2],
 [1,2,1],
 [2,1,1]
]
完全コード:
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permuteUnique = function(nums) {
    let arr = nums.sort((m, n)=> m - n);
    let res = [];

    function def(n, path) {
        for (let i = 0; i < n.length; i++) {
            let curPath = [...path, n[i]];
            let copy = [...n];

            copy.splice(i, 1);
            if (i > 0 && n[i - 1] === n[i]) continue;
            if (curPath.length === arr.length) res.push(curPath);
            if (copy.length > 0) def(copy, curPath);
        }
    }

    def(arr, []);
    return res;
};