我试图理解回溯,但我陷入了这个问题,提示如下:
给定一组不同的整数,返回所有可能的子集。
示例输入:[1,2,3]
示例输出:[[], [1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]
这是我的代码:
def subsets(nums):
res = []
backtrack(res, [], nums, 0)
return res
def backtrack(res, temp, nums, start):
# print(temp)
res.append(temp)
for i in range(start, len(nums)):
temp.append(nums[i])
backtrack(res, temp, nums, i + 1)
temp.pop() # Backtrack
当我返回时,res
我得到一个 size 的空列表列表2^(len(nums))
,这是正确的大小,但数字不存在。temp
但是,在我之前打印res.append(temp)
表明 temp 输出正确。
例如
res = [[], [], [], [], [], [], [], []]
打印语句:
[] [1] [1, 2] [1, 2, 3] [1, 3] [2] [2, 3] [3]
为什么更改没有延续到res
列表中?
编辑1:
这个解决方案有效,有什么区别?
def subsets(nums):
res = []
backtrack(res, [], nums, 0)
return res
def backtrack(res, temp, nums, start):
# print(temp)
res.append(temp)
for i in range(start, len(nums)):
backtrack(res, temp + [nums[i]], nums, i + 1)