面试150 组合总和

思路

使用回溯法,在递归过程中,当当前累计和等于目标值时,将当前路径作为一个有效结果进行收集。由于题目允许重复使用元素,因此在回溯循环中仍需使用 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