216. 组合总和 III
题目描述: 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。
考察重点:递归回溯
方法概括:注意回溯中,go指针和go数组的使用方式。
func recursion1(nums []int, res *[][]int, numslen int, nowN int, k int, n int) bool {
if numslen == k && nowN == n {
val := *res
var t []int = make([]int, numslen)
copy(t, nums)
addr := append(val, t)
*res = addr
return true
}
if numslen >= k {
return false
}
for i := nums[numslen-1] + 1; i <= 9; i++ {
nums[numslen] = i
numslen++
recursion1(nums, res, numslen, nowN+i, k, n)
numslen--
}
return true
}
func CombinationSum3(k int, n int) [][]int {
var res [][]int
for i := 1; i < 10; i++ {
var nums []int = make([]int, k)
nums[0] = i
recursion1(nums, &res, 1, i, k, n)
}
return res
}
|