解题思路
paths存放最终结果,path用于记录回溯过程中当前的结果
backtrack参数sum_记录当前节点达到的和,也就是path的总和
另外为了清晰的记录每个组合开始数字的索引,引入start_index,避免重复考虑
class Solution:
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
paths = []
path = []
def backtrack(candidates, target, sum_, start_index):
# Base Case
if sum_ == target:
paths.append(path[:])
return
if sum_ > target:
return
for i in range(start_index, len(candidates)):
#剪枝
if sum_ + candidates[i] > target:
return
sum_ += candidates[i]
path.append(candidates[i])
backtrack(candidates, target, sum_, i)
sum_ -= candidates[i] # 回溯
path.pop() # 回溯
candidates.sort()#剪枝
backtrack(candidates, target, 0, 0)
return paths