首页 > 解决方案 > Leetcode 的 Subsets 问题解决方案不起作用我不知道为什么

问题描述

**

给定一个包含唯一元素的整数数组 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]
]

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

标签: arraysdata-structuressubsetpermutationbacktracking

解决方案


问题在这里:

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

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

output.push([...subset])

推荐阅读