题目:
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的数字可以无限制重复被选取。
思路:
利用递归的方式
代码:
class Solution:
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
candidates.sort()
n = len(candidates)
res = []
def backtrack(start, tmp_sum, tmp):
if tmp_sum == target:
res.append(tmp)
return
for i in range(start, n):
# tmp_sum += candidates[i]
if tmp_sum + candidates[i] > target:
break
# tmp += [candidates[i]]
backtrack(i, tmp_sum + candidates[i], tmp + [candidates[i]])
backtrack(0, 0, [])
return res