题目:
找出所有相加之和为 n **的 k ****个数的组合,且满足下列条件:
- 只使用数字1到9
- 每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回
算法:
func combinationSum3(k int, n int) [][]int {
ans := make([][]int, 0)
result := make([]int, 0)
var backtracking func(index, sum, num int)
backtracking = func(index, sum, num int) {
if index > 10 || index > n || sum < 0 || num < 0 {
return
}
if sum == 0 && num == 0 {
ans = append(ans, append([]int{}, result...))
return
}
backtracking(index + 1, sum, num)
if sum - index >= 0 {
result = append(result, index)
backtracking(index + 1, sum - index, num - 1)
result = result[:len(result) - 1]
}
}
backtracking(1, n, k)
return ans
}