美文网首页
JavaScript - 子集2(回溯法)

JavaScript - 子集2(回溯法)

作者: ElricTang | 来源:发表于2020-07-28 11:13 被阅读0次

    给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
    说明:解集不能包含重复的子集。
    示例:

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

    完整代码:

    /**
     * @param {number[]} nums
     * @return {number[][]}
     */
    var subsetsWithDup = 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.slice(i + 1);
    
                if (i > 0 && n[i] === n[i - 1]) continue;
                res.push(curPath);
                if (copy.length > 0) def(copy, curPath);
            }
        }
    
        def(arr, []);
        return [...res, []];
    };
    

    相关文章

      网友评论

          本文标题:JavaScript - 子集2(回溯法)

          本文链接:https://www.haomeiwen.com/subject/wetfrktx.html