Leetcode 的子集问题解决方案不起作用我不知道为什么

问题描述 投票:0回答:1

**

给定一个由唯一元素组成的整数数组 nums,返回所有可能的子集(幂集)。

**

解集不得包含重复的子集。以任意顺序返回解决方案。

Example 1:

Input: nums = [1,2,3]
Output: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

Example 2:

Input: nums = [0]
Output: [[],[0]]

我的解决方案-

let subsets = function(nums) {
    
let output = []

function backtrack(nums, subset = [], index = 0) {
    if(index === nums.length) {
        output.push(subset)
        return
    }
    // ith element is not considered
    backtrack(nums, subset, index + 1)
    
    // ith element is considered
    subset.push(nums[index])
    backtrack(nums, subset, index + 1)
    subset.pop()
    
    
}

    backtrack(nums)
    return output

};
console.log(subsets([1,2,3]))


Output:

[
  [], 
  [], 
  [], 
  [],
  [], 
  [], 
  [], 
  [],
]

Expected Output: 
[
  [],
  [1],
  [2],
  [3],
  [1,2],
  [1,3],
  [2,3],
  [1,2,3]
]

我不知道为什么当我在回溯函数中推送其中的子集时输出数组为空。

javascript arrays data-structures subset backtracking
1个回答
1
投票

问题就在这里:

if(index === nums.length) {
        output.push(subset)
        return
    }

当您按下

subset
时,您正在传递参考。运行完代码后,
output
数组中的每个子集都引用 []。这就是为什么你要返回 [] 数组的原因。相反,您应该复制这些值,然后推送它。

output.push([...subset])
© www.soinside.com 2019 - 2024. All rights reserved.