552.student-attendance-record-ii.go 526 B

1234567891011121314151617181920212223242526272829
  1. const MOD int = 1000000007
  2. func checkRecord(n int) int {
  3. // A, L, P
  4. var dp = [2][3]int{{1, 1, 0}, {1, 0, 0}}
  5. for i := 1; i < n; i++ {
  6. var nxt [2][3]int
  7. for A := 0; A <= 1; A++ {
  8. for L := 0; L <= 2; L++ {
  9. nxt[A][0] += dp[A][L] // Append P
  10. if L > 0 {
  11. nxt[A][L] += dp[A][L-1] // Append L
  12. }
  13. if A > 0 {
  14. nxt[A][0] += dp[A-1][L] // Append A
  15. }
  16. nxt[A][L] %= MOD
  17. }
  18. }
  19. dp = nxt
  20. }
  21. sum := 0
  22. for i := range dp {
  23. for _, v := range dp[i] {
  24. sum = (sum + v) % MOD
  25. }
  26. }
  27. return sum
  28. }