您的位置:首页 > 其它

leetcode | Combination Sum & Combination Sum 2

2017-06-04 22:38 441 查看
1. Combination Sum:

Given a set of candidate numbers (C) (without duplicates) and a target number (T),
find all unique combinations in C where the candidate numbers sums to T.

The same repeated number may be chosen from C unlimited number of times.

Note:

All numbers (including target) will be positive integers.
The solution set must not contain duplicate combinations.

For example, given candidate set 
[2, 3, 6, 7]
 and target 
7


A solution set is: 

[
[7],
[2, 2, 3]
]

可重复的使用Candidate中的数字,问有几种方式能让数字相加的结果等于target?

class Solution(object):
def combinationSum(self, candidates, target):
candidates = sorted(candidates)
result = [] #用于存放最终的结果
self.combination_sum(candidates,0,[],result,target)
return result

def combination_sum(self,nums,start,path,result,target):  #path 表示当前的走过的路径
if not target:
result.append(path)
return

for i in range(start,len(nums)):
if i>start and nums[i]==nums[i-1]: #这一步,保证了得到的结果不会重复
continue
if nums[i]>target:  #这一步,保证了即使i一直为0,也会跳出循环
return
self.combination_sum(nums,i,path+[nums[i]],result,target-nums[i]) #这里的start从i开始,使得同一个元素能够被使用多次。


2. Given a collection of candidate numbers (C)
and a target number (T),
find all unique combinations in C where
the candidate numbers sums to T.

Each number in C may only be used once in the combination.

Note:

All numbers (including target) will be positive integers.
The solution set must not contain duplicate combinations.

For example, given candidate set 
[10, 1, 2, 7, 6, 1, 5]
 and target 
8


A solution set is: 

[
[1, 7],
[1, 2, 5],
[2, 6],
[1, 1, 6]
]

不可重复的使用Candidate中的数字,问有几种方式能让数字相加的结果等于target?
只需要把上述代码的最后一行改为:

self.combine_sum_2(nums,i+1,path+[nums[i]],result,target-nums[i]) #start = i+1 保证在一个路径中,同一个元素不会被重复使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: