给定一个无重复元素的数组 candidates
和一个目标数 target
,找出 candidates
中所有可以使数字和为 target
的组合。
candidates
中的数字可以无限制重复被选取。
说明:
- 所有数字(包括
target
)都是正整数。 - 解集不能包含重复的组合。
示例 1:
输入: candidates =[2,3,6,7],
target =7
, 所求解集为: [ [7], [2,2,3] ]
一道典型的回溯算法题目
class Solution(object): def combinationSum(self,candidates, target): candidates = list(set(candidates)) global result result = [] start = 0 self.backtrack(candidates, target, start, []) return result def backtrack(self,candidates,target,start,val): if target == 0: result.append(val[:]) for i in range(start,len(candidates)): if target>0: val.append(candidates[i]) else: break self.backtrack(candidates, target - candidates[i], i, val) val.pop()