LeetCode in Python 39. Combination Sum
https://leetcode.com/problems/combination-sum/
Given a set of candidate numbers (candidates
) (without duplicates) and a target number (target
), find all unique combinations in candidates
where the candidate numbers sums to target
.
The same repeated number may be chosen from candidates
unlimited number of times.
Note:
- All numbers (including
target
) will be positive integers. - The solution set must not contain duplicate combinations.
Example 1:
Input: candidates =[2,3,6,7],
target =7
, A solution set is: [ [7], [2,2,3] ]
Example 2:
Input: candidates = [2,3,5],
target = 8,
A solution set is:
[
[2,2,2,2],
[2,3,3],
[3,5]
]
Solution:
class Solution(object): def combinationSum(self, candidates, target): """ :type candidates: List[int] :type target: int :rtype: List[List[int]] """ res = [] candidates.sort() def dfs(start, out, target): if not target: res.append(out) return for i in range(start, len(candidates)): if candidates[i] > target: break dfs(i, out+[candidates[i]], target-candidates[i]) dfs(0, [], target) return res
经典dfs题,这个题的dfs思路是先从小到大排序,再从小的开始search。比如candidates=[1,2,3],target=5,dfs的路径是这样的:1->1->1->1->1, 1->1->1->2, 1->1->3……