LeetCode 39. Combination Sum
Description
Given a set of candidate numbers (
candidates
) (without duplicates) and a target number (target
), find all unique combinations incandidates
where the candidate numbers sums totarget
.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
思路是与之前做过的查找解的题目相似:
把target
减去候选数,得到剩余target
,继续查找,直到target
为0
。
func combinationSum(candidates []int, target int) [][]int {
sort.Ints(candidates)
return doCombinationSum(candidates, target)
}
func doCombinationSum(candidates []int, target int) [][]int {
res := [][]int{}
if len(candidates) == 0 {
return res
}
t := target - candidates[0]
if t < 0 {
return res
} else if t == 0 {
res = append(res, []int{candidates[0]})
} else if t > 0 {
res = doCombinationSum(candidates, t)
for i, v := range res {
res[i] = append([]int{candidates[0]}, v...)
}
}
res = append(res, doCombinationSum(candidates[1:], target)...)
return res
}