【发布时间】:2020-09-14 04:00:10
【问题描述】:
我正在做这个问题,发现于: https://leetcode.com/problems/combination-sum-iv/
这是我的代码:
class Solution:
def combinationSum4(self, nums: List[int], target: int) -> int:
length = len(nums)
count = 0
tracker = []
result = []
def backtrack(targetLeft: int) -> None:
nonlocal count
if targetLeft == 0:
print(tracker)
result.append(tracker)
count += 1
return
elif targetLeft > 0:
for number in nums:
if targetLeft - number < 0:
continue
tracker.append(number)
backtrack(targetLeft - number)
tracker.pop()
return
backtrack(target)
print(result)
return count
在理解我的代码的过程中,我试图打印出导致目标总和的组合列表。我还在最后打印结果数组,其中存储了所有组合。运行代码时,这是标准输出:
[1, 1, 1, 1]
[1, 1, 2]
[1, 2, 1]
[1, 3]
[2, 1, 1]
[2, 2]
[3, 1]
[[], [], [], [], [], [], []]
它似乎生成了正确的组合,但是这些组合没有正确地附加到结果数组中。结果数组返回到一个空数组数组。我尝试手动浏览代码,但我不太确定导致这种情况发生的原因。
【问题讨论】:
-
这可能是因为您将对列表的引用附加到结果列表中,但是当您迭代时,您会从这个临时列表中弹出,导致您也从结果列表中删除项目。
-
试试 result.append(tracker.copy()) 是否有帮助
-
这很有意义,有效!谢谢
标签: python arrays recursion backtracking