Combination Sum
使用集合中的数据求特定和,组合数据无重复,但数据可重复使用
dfs算法,现对数据进行排序,每次取自身及其后的数,防止重复
res = []
candidates.sort()
self.dfs(candidates, target, 0, [], res)
return res
def dfs(self, nums, target, index, path, res):
if target < 0:
return
if target == 0:
res.append(path)
return
for i in xrange(index, len(nums)):
self.dfs(nums, target-nums[i], i, path+[nums[i]], res)
Combination Sum II
数据不能重复使用
res = []
candidates.sort()
self.dfs(candidates, target, 0, [], res)
return res
def dfs(self, nums, target, index, path, res):
if target < 0 :
return
if target == 0:
res.append(path)
return
for i in xrange(index, len(nums)):
if i!=index and nums[i] == nums[i-1]:
continue
self.dfs(nums, target - nums[i], i + 1, path + [nums[i]], res)
比如有1,1,1,结果中只能包含两个1,那么该方案只取前两个,以避免重复。