有人可以帮忙,为什么输出不正确?给定一组不同的整数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]))
您的字符串和列表示例不相同:您在字符串代码中重新分配curr
并为每个递归调用创建新的字符串,但是将其追加到列表代码中的相同列表中,这意味着您将始终随身携带您添加的所有内容,因为您一遍又一遍地使用相同的列表。
您的列表代码将在您执行字符串代码的工作时起作用:
curr = curr + [nums[index]]
(或者,将curr + [nums[index]]
传递给辅助函数的第二个调用。