在LeetCode 39. 组合总和题目中,使用python进行编程:
class Solution:
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
def findPath(candidates, target, path, ind, res):
if target == 0:
res.append(path)
if target < 0:
return
for i in range(ind, len(candidates)):
if candidates[i] <= target:
path.append(candidates[i])
findPath(candidates, target - candidates[i], path, i, res)
path.pop()
path = []
res = []
findPath(candidates, target, path, 0, res)
return res
发现运行结果res一直为[[],[]],debug了很久,发现其实时python的list机制问题。在python中,list保存的不是值,而是对应元素的地址,所有当res后面append(path)时,保存的时path的地址。当path变化后,整个res前面的元素也发生了变化。如何修改,可以在res.append(path.copy())增加copy()函数,这样就保存了一个新的空间地址,就可以通过了。