我正在尝试理解回溯算法,但卡在这个问题上了,以下是问题描述:
给定一组不同的整数,返回所有可能的子集。
示例输入:[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`时,我得到一个大小为`2^(len(nums))`的空列表的列表,这是正确的大小,但数字不在其中。然而,在执行`res.append(temp)`之前打印`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)
copy
模块和copy.copy(temp)
- Oliver Ni