找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
说明:
所有数字都是正整数。
解集不能包含重复的组合。
示例 1:
输入: k = 3, n = 7
输出: [[1,2,4]]
示例 2:
输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]
func combinationSum3(k int, n int) [][]int {
if k == 0 || n == 0{
return [][]int{}
}
res := [][]int{}
taken := make(map[int]bool,10)
tmp := make([]int,k+1)
var helper func(index int,n int)
helper = func(index int,n int){
if index == k+1 {
if n == 0{
t := make([]int,k)
copy(t,tmp[1:])
res = append(res,t)
}
return
}
for i := tmp[index-1] + 1; i <= 9 ;i++{
if !taken[i]{
taken[i] = true
tmp[index] = i
helper(index+1,n-i)
taken[i] = false
}
}
}
helper(1,n)
return res
}