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 Classic title, dfs thinking this problem is to start small to large order, then start small search. Such candidates = [1,2,3], target = 5, the path is such that dfs: 1 -> 1 -> 1 -> 1 -> 1, 1-> 1-> 1-> 2, 1-> 1-> 3 ......