lc-go/solutions/2/q216/solution.go
2026-01-25 11:56:12 +09:00

37 lines
735 B
Go

package q216
// k numbers sum up to n
func calc(k int, buf []int, offset int, remSum int, ret [][]int) [][]int {
if offset == k-1 && remSum > 0 && remSum < 10 {
buf[offset] = remSum
cp := make([]int, len(buf))
copy(cp, buf)
return append(ret, cp)
}
remK := k - offset
minI := 1
if offset > 0 {
minI = buf[offset-1] + 1
}
maxI := 9 - remK + 1
for i := minI; i <= maxI; i++ {
minSum := (i + i + remK - 1) * remK / 2
maxSum := (19 - remK) * remK / 2
if remSum < minSum || remSum > maxSum {
continue
}
buf[offset] = i
ret = calc(k, buf, offset+1, remSum-i, ret)
}
return ret
}
func combinationSum3(k int, n int) [][]int {
return calc(k, make([]int, k), 0, n, [][]int{})
}
var _ = combinationSum3