Subset_problem没有给出正确的结果

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

有人可以帮忙,为什么输出不正确?给定一组不同的整数nums,返回所有可能的子集(幂集)。

class Solution(object):
    sol =[]
    index = 0

    def subsets(self, nums):
        sol = []
        index = 0
        curr = []
        self.helper(nums, sol, index, curr)
        return sol

    def helper(self, nums, sol, index, curr = []):
        if index == len(nums)  or len(nums)== 0:
            sol.append(list(curr))
            return sol

        self.helper(nums, sol, index +1, curr)
        curr.append(nums[index])
        self.helper(nums, sol, index + 1, curr)


s = Solution()
print (s.subsets([1, 2, 3]))

实际输出= [[],[3],[3、2],[3、2、3],[3、2、3、1],[3、2、3、1、3],[ 3,2,3,1,3,2],[3,2,3,1,3,2,3]]

期望的输出:[[],[1],[1,2],[1,2,3],[1,3],[2],[2,3],[3]]

如果我将curr更改为string(之前已列出),则它正在工作并给出正确的结果:

class Solution(object):
    sol =[]
    index = 0

    def subsets(self, nums):
        sol = []
        index = 0
        curr = ""
        self.helper(nums, sol, index, curr)
        return sol

    def helper(self, nums, sol, index, curr):


        if index == len(nums)  or len(nums)== 0:
            print (curr, "===")
            sol.append(list(curr))
            return sol

        self.helper(nums, sol, index +1, curr)
        #append(nums[index])
        curr = curr + str(nums[index])
        self.helper(nums, sol, index +1, curr)


s = Solution()
print (s.subsets([1,2, 3]))

python algorithm recursion
1个回答
0
投票

您的字符串和列表示例不相同:您在字符串代码中重新分配curr并为每个递归调用创建新的字符串,但是将其追加到列表代码中的相同列表中,这意味着您将始终随身携带您添加的所有内容,因为您一遍又一遍地使用相同的列表。

您的列表代码将在您执行字符串代码的工作时起作用:

curr = curr + [nums[index]]

(或者,将curr + [nums[index]]传递给辅助函数的第二个调用。

© www.soinside.com 2019 - 2024. All rights reserved.