LeetCode39. 组合总和Golang版
1. 问题描述
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的数字可以无限制重复被选取。
说明:
所有数字(包括 target)都是正整数。
解集不能包含重复的组合。
2. 思路
回溯法,模板题
3. 代码
func combinationSum(candidates []int, target int) [][]int {
var path []int
var res [][]int
backtracking(candidates, target, 0, 0, path, &res)
return res
}
func backtracking(candidates []int, target int, sum int, startIndex int, path []int, res *[][]int ) {
if sum > target {
return
}
if sum == target {
temp := make([]int, len(path))
copy(temp, path)
// fmt.Println(path)
*res = append(*res, temp)
return
}
for i := startIndex; i < len(candidates); i++ {
sum += candidates[i]
path = append(path, candidates[i])
backtracking(candidates, target, sum, i, path, res)
path = path[:len(path) - 1]
sum -= candidates[i]
}
}