lc-go/solutions/2/q216/solution.go

38 lines
828 B
Go

// Package q216 implements a solution for https://leetcode.com/problems/combination-sum-iii/
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