1223. Dice Roll Simulation LeetCode Solution
In this guide, you will get 1223. Dice Roll Simulation LeetCode Solution with the best time and space complexity. The solution to Dice Roll Simulation problem is provided in various programming languages like C++, Java, and Python. This will be helpful for you if you are preparing for placements, hackathons, interviews, or practice purposes. The solutions provided here are very easy to follow and include detailed explanations.
Table of Contents
- Problem Statement
- Complexity Analysis
- Dice Roll Simulation solution in C++
- Dice Roll Simulation solution in Java
- Dice Roll Simulation solution in Python
- Additional Resources

Problem Statement of Dice Roll Simulation
A die simulator generates a random number from 1 to 6 for each roll. You introduced a constraint to the generator such that it cannot roll the number i more than rollMax[i] (1-indexed) consecutive times.
Given an array of integers rollMax and an integer n, return the number of distinct sequences that can be obtained with exact n rolls. Since the answer may be too large, return it modulo 109 + 7.
Two sequences are considered different if at least one element differs from each other.
Example 1:
Input: n = 2, rollMax = [1,1,2,2,2,3]
Output: 34
Explanation: There will be 2 rolls of die, if there are no constraints on the die, there are 6 * 6 = 36 possible combinations. In this case, looking at rollMax array, the numbers 1 and 2 appear at most once consecutively, therefore sequences (1,1) and (2,2) cannot occur, so the final answer is 36-2 = 34.
Example 2:
Input: n = 2, rollMax = [1,1,1,1,1,1]
Output: 30
Example 3:
Input: n = 3, rollMax = [1,1,1,2,2,3]
Output: 181
Constraints:
1 <= n <= 5000
rollMax.length == 6
1 <= rollMax[i] <= 15
Complexity Analysis
- Time Complexity:
- Space Complexity:
1223. Dice Roll Simulation LeetCode Solution in C++
class Solution:
def dieSimulator(self, n: int, rollMax: list[int]) -> int:
kMaxRolls = 15
kMod = 1_000_000_007
dp = [[[0] * (kMaxRolls + 1) for j in range(6)] for i in range(n + 1)]
for num in range(6):
dp[1][num][1] = 1
for i in range(2, n + 1):
for currNum in range(6):
for prevNum in range(6):
for k in range(1, 15 + 1):
if prevNum != currNum:
dp[i][currNum][1] = (
dp[i][currNum][1] + dp[i - 1][prevNum][k]) % kMod
elif k < rollMax[currNum]:
dp[i][currNum][k + 1] = dp[i - 1][currNum][k]
ans = 0
for num in range(6):
for k in range(1, 15 + 1):
ans += dp[n][num][k]
return ans % kMod
/* code provided by PROGIEZ */
1223. Dice Roll Simulation LeetCode Solution in Java
N/A
// code provided by PROGIEZ
1223. Dice Roll Simulation LeetCode Solution in Python
N/A
# code by PROGIEZ
Additional Resources
- Explore all LeetCode problem solutions at Progiez here
- Explore all problems on LeetCode website here
Happy Coding! Keep following PROGIEZ for more updates and solutions.