add new solutions
This commit is contained in:
parent
d798d5e8c9
commit
886b5e0a8e
34 changed files with 1164 additions and 0 deletions
51
solutions/0/q77/solution.go
Normal file
51
solutions/0/q77/solution.go
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
package q77
|
||||
|
||||
var (
|
||||
allocBuf []int
|
||||
allocP int
|
||||
)
|
||||
|
||||
func alloc(sz int) []int {
|
||||
if allocBuf == nil || allocP+sz > 8192 {
|
||||
allocP = 0
|
||||
allocBuf = make([]int, 8192)
|
||||
}
|
||||
ret := allocBuf[allocP : allocP+sz]
|
||||
allocP += sz
|
||||
return ret
|
||||
}
|
||||
|
||||
func combine(n int, k int) [][]int {
|
||||
buf := alloc(k)
|
||||
for i := range buf {
|
||||
buf[i] = i + 1
|
||||
}
|
||||
|
||||
sz := 1
|
||||
for i := 1; i <= k; i++ {
|
||||
sz = sz * (n - i + 1) / i
|
||||
}
|
||||
ret := make([][]int, 0, sz)
|
||||
for {
|
||||
t := alloc(k)
|
||||
copy(t, buf)
|
||||
ret = append(ret, t)
|
||||
|
||||
if buf[0] == n-k+1 {
|
||||
break
|
||||
}
|
||||
|
||||
buf[k-1]++
|
||||
i := k - 1
|
||||
for ; i > 0 && buf[i] > n-(k-1-i); i-- {
|
||||
buf[i-1]++
|
||||
}
|
||||
for i++; i < k; i++ {
|
||||
buf[i] = buf[i-1] + 1
|
||||
}
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
var _ = combine
|
||||
Loading…
Add table
Add a link
Reference in a new issue