candidates 中的数字可以无限制重复被选取。
说明:
所有数字(包括 target)都是正整数。 解集不能包含重复的组合。 示例 1:
输入:candidates = [2,3,6,7], target = 7, 所求解集为: [ [7], [2,2,3] ] 示例 2:
输入:candidates = [2,3,5], target = 8, 所求解集为: [ [2,2,2,2], [2,3,3], [3,5] ]
提示:
1 <= candidates.length <= 30 1 <= candidates[i] <= 200 candidate 中的每个元素都是独一无二的。 1 <= target <= 500
class Solution: def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: ans = [] curr = [] candidates.sort() def dfs(candidates, target, start, curr, ans): if target == 0: ans.append(curr) return for i in range(start, len(candidates)): if candidates[i] > target: # 剪枝,如果当前的元素大于目标,不需要找了 break curr.append(candidates[i]) dfs(candidates, target-candidates[i], i, curr, ans) curr.pop(-1) dfs(candidates, target, 0, curr, ans) return ans