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
A solution set is:
可重复的使用Candidate中的数字,问有几种方式能让数字相加的结果等于target?
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
A solution set is:
不可重复的使用Candidate中的数字,问有几种方式能让数字相加的结果等于target?
只需要把上述代码的最后一行改为:
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 保证在一个路径中,同一个元素不会被重复使用
相关文章推荐
- leetcode Combination Sum &Combination Sum II
- Leetcode:Combination Sum与Combination Sum II
- leetcode-39&40&216 Combination Sum I&II&III
- LeetCode | Combination Sum & II & III
- Leetcode Combination Sum I & II
- Leetcode | Combination Sum I && II
- LeetCode: Combination Sum I && II && III
- leetcode39&40_Combination Sum& CombinationSumII
- LeetCode Combination Sum & Combination Sum II
- 【LeetCode】Combination Sum && II
- [LeetCode 39&40] Combination Sum I & II
- 【LeetCode】Combination Sum I & II 解题报告
- Leetcode刷题系列(十八)CombinationSum && WordLadder
- 【LeetCode】Combination Sum && Combination Sum II
- LeetCode Solutions : Combination Sum I & II
- [leetcode] 39& 40 Combination Sum I& II
- LeetCode - Combination Sum I && II
- LeetCode解题报告—— Combination Sum & Combination Sum II & Multiply Strings
- Leetcode: Combination Sum IV && Summary: The Key to Solve DP
- LeetCode 39 && 40 Combination Sum I && II 关键在于剪枝,剪枝讨论在末尾