add new solutions
This commit is contained in:
parent
f249852923
commit
f297e11859
10 changed files with 373 additions and 0 deletions
45
solutions/31/q3129/solution.go
Normal file
45
solutions/31/q3129/solution.go
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
// Package q3129 implements a solution for https://leetcode.com/problems/find-all-possible-stable-binary-arrays-i/
|
||||
package q3129
|
||||
|
||||
const MOD = 1e9 + 7
|
||||
|
||||
func alloc(zeros, ones int) [][][2]int {
|
||||
buf := make([][2]int, (zeros+1)*(ones+1))
|
||||
ret := make([][][2]int, zeros+1)
|
||||
for i := range ret {
|
||||
ret[i] = buf[i*(ones+1) : (i+1)*(ones+1)]
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func numberOfStableArrays(zeros, ones, limit int) int {
|
||||
dp := alloc(zeros, ones)
|
||||
// dimensions: [zeros][ones][last_digit]
|
||||
|
||||
for z := 1; z <= min(limit, zeros); z++ {
|
||||
dp[z][0][0] = 1
|
||||
}
|
||||
for o := 1; o <= min(limit, ones); o++ {
|
||||
dp[0][o][1] = 1
|
||||
}
|
||||
for z := 1; z <= zeros; z++ {
|
||||
for o := 1; o <= ones; o++ {
|
||||
dp[z][o][0] = dp[z-1][o][1] + dp[z-1][o][0]
|
||||
if z > limit {
|
||||
dp[z][o][0] -= dp[z-1-limit][o][1]
|
||||
}
|
||||
|
||||
dp[z][o][1] = dp[z][o-1][0] + dp[z][o-1][1]
|
||||
if o > limit {
|
||||
dp[z][o][1] -= dp[z][o-1-limit][0]
|
||||
}
|
||||
|
||||
dp[z][o][0] = (dp[z][o][0] + MOD) % MOD
|
||||
dp[z][o][1] = (dp[z][o][1] + MOD) % MOD
|
||||
}
|
||||
}
|
||||
|
||||
return (dp[zeros][ones][0] + dp[zeros][ones][1]) % MOD
|
||||
}
|
||||
|
||||
var _ = numberOfStableArrays
|
||||
45
solutions/31/q3130/solution.go
Normal file
45
solutions/31/q3130/solution.go
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
// Package q3130 implements a solution for https://leetcode.com/problems/find-all-possible-stable-binary-arrays-ii/
|
||||
package q3130
|
||||
|
||||
const MOD = 1e9 + 7
|
||||
|
||||
func alloc(zeros, ones int) [][][2]int {
|
||||
buf := make([][2]int, (zeros+1)*(ones+1))
|
||||
ret := make([][][2]int, zeros+1)
|
||||
for i := range ret {
|
||||
ret[i] = buf[i*(ones+1) : (i+1)*(ones+1)]
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func numberOfStableArrays(zeros, ones, limit int) int {
|
||||
dp := alloc(zeros, ones)
|
||||
// dimensions: [zeros][ones][last_digit]
|
||||
|
||||
for z := 1; z <= min(limit, zeros); z++ {
|
||||
dp[z][0][0] = 1
|
||||
}
|
||||
for o := 1; o <= min(limit, ones); o++ {
|
||||
dp[0][o][1] = 1
|
||||
}
|
||||
for z := 1; z <= zeros; z++ {
|
||||
for o := 1; o <= ones; o++ {
|
||||
dp[z][o][0] = dp[z-1][o][1] + dp[z-1][o][0]
|
||||
if z > limit {
|
||||
dp[z][o][0] -= dp[z-1-limit][o][1]
|
||||
}
|
||||
|
||||
dp[z][o][1] = dp[z][o-1][0] + dp[z][o-1][1]
|
||||
if o > limit {
|
||||
dp[z][o][1] -= dp[z][o-1-limit][0]
|
||||
}
|
||||
|
||||
dp[z][o][0] = (dp[z][o][0] + MOD) % MOD
|
||||
dp[z][o][1] = (dp[z][o][1] + MOD) % MOD
|
||||
}
|
||||
}
|
||||
|
||||
return (dp[zeros][ones][0] + dp[zeros][ones][1]) % MOD
|
||||
}
|
||||
|
||||
var _ = numberOfStableArrays
|
||||
Loading…
Add table
Add a link
Reference in a new issue