
思路
使用回溯法,在递归过程中,当当前累计和等于目标值时,将当前路径作为一个有效结果进行收集。由于题目允许重复使用元素,因此在回溯循环中仍需使用 startIndex 来控制搜索范围,但在递归调用 backtracking 函数时不需要使用 i+1,而是继续传入当前的 i,以允许同一元素被多次选取。
python
class Solution:
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
self.path=[]
self.result=[]
def backtracking(candidates,target,sum,startIndex):
if sum==target:
self.result.append(self.path[:])
for i in range(startIndex,len(candidates)):
if sum>target:
break
sum+=candidates[i]
self.path.append(candidates[i])
backtracking(candidates,target,sum,i)
sum-=candidates[i]
self.path.pop()
if not candidates:
return [[]]
backtracking(candidates,target,0,0)
return self.result