> Problem: [216. 组合总和 III](https://leetcode.cn/problems/combination-sum-iii/description/)
# 思路
> 首先看到这个组合想到组合总和1,借用组合总和1的思路,只需要标记使用过的数字然后逐次遍历就好
# 解题方法
>首先是backtracking的递归出口,刚开始的时候设置的递归出口是target==0,但是后来debug发现在[1,6]的时候会出来[1,6,0]是因为paths在[1,6]的时候刚好等于target于是递归到出口处,复制给temp的之后数组直接把0复制上了,于是再加上另一个递归条件len(path)==k;后续横向处理for循环逻辑的时候只需要一个map标记上已经使用过的数字就好了。
func combinationSum3(k int, n int) (res [][]int) {
startIndex := 1
backtracking(k, n, startIndex, []int{}, &res)
return
}
func backtracking(k int, target, startIndex int, paths []int, res *[][]int) {
if target == 0 && len(paths) == k {
temp := make([]int, k)
copy(temp, paths)
*res = append(*res, temp)
return
}
user := make(map[int]bool)
for i := startIndex; i <= 9; i++ {
if i <= target && !user[i] {
paths = append(paths, i)
user[i] = true
backtracking(k, target-i, i+1, paths, res)
paths = paths[:len(paths)-1]
user[i] = false
}
}
}