2
int mod = 1000000000 + 7;4
public int checkRecord(int n) {5
int[][][] cache = new int[n + 1][2][3];6
for (int i = 0; i <= n; i++) {7
for (int j = 0; j < 2; j++) {8
for (int k = 0; k < 3; k++) cache[i][j][k] = -1;11
return populate(n, 0, 1, 2, cache);14
public int populate(int n, int ptr, int aCount, int lCount, int[][][] cache) {15
if (ptr >= n) return 1;16
if (cache[ptr][aCount][lCount] != -1) return cache[ptr][aCount][lCount];20
count = populate(n, ptr + 1, aCount, lCount - 1, cache) % mod;23
count = (count + populate(n, ptr + 1, aCount, 2, cache)) % mod;25
if (aCount == 1) count = (count + populate(n, ptr + 1, aCount - 1, 2, cache)) % mod;26
cache[ptr][aCount][lCount] = (int) (count % mod);27
return cache[ptr][aCount][lCount];