Dice Roll Simulation LeetCode solution in Java

1
class Solution {
2
long[][][] dp;
3
int mod = 1_000_000_007;
4

5
public int dieSimulator(int n, int[] rollMax) {
6
dp = new long[n + 1][7][16];
7
for (long[][] row : dp) for (long[] col : row) Arrays.fill(col, -1);
8

9
return (int) helper(n, 0, 0, rollMax, 0);
10
}
11

12
private long helper(int n, int dice, int prev, int[] rollMax, int runs) {
13
if (n == dice) return 1;
14

15
if (dp[dice][prev][runs] != -1) return dp[dice][prev][runs];
16

17
long ans = 0;
18
int[] temp = rollMax;
19
for (int i = 1; i <= 6; i++) {
20
if (prev != 0 && i == prev && rollMax[i - 1] <= runs) continue;
21
if (i == prev) ans = (ans + helper(n, dice + 1, i, rollMax, runs + 1)) % mod;
22
else ans = (ans + helper(n, dice + 1, i, rollMax, 1)) % mod;
23
}
24

25
dp[dice][prev][runs] = ans;
26
return ans;
27
}
28
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0