Number of Dice Rolls With Target Sum
Problem statement
You have n dice and each die has k faces numbered from 1 to k.
Given three integers n, k, and target, return the number of possible ways (out of the kn total ways) to roll the dice so the sum of the face-up numbers equals target. Since the answer may be too large, return it modulo 109 + 7.
Example 1:
Input: n = 1, k = 6, target = 3Output: 1Explanation: You throw one die with 6 faces.There is only one way to get a sum of 3.
Example 2:
Input: n = 2, k = 6, target = 7Output: 6Explanation: You throw two dice, each with 6 faces.There are 6 ways to get a sum of 7: 1+6, 2+5, 3+4, 4+3, 5+2, 6+1.
Example 3:
Input: n = 30, k = 30, target = 500Output: 222616187Explanation: The answer must be returned modulo 109 + 7.
Constraints:
1 <= n, k <= 301 <= target <= 1000
My solution
/**
* @param {number} d
* @param {number} f
* @param {number} target
* @return {number}
*/
const mod = Math.pow(10, 9) + 7;
const tracker = new Map();
var numRollsToTarget = function(d, f, target) {
if (target < d || target > d * f) {
return 0;
}
if (d === 1) {
return target <= f ? 1 : 0;
}
const key = `${d}${f}${target}`;
if (!tracker.get(key)) {
let sum = 0;
for (let i = 1; i <= f; i++) {
sum += numRollsToTarget(d - 1, f, target - i);
sum %= mod;
}
tracker.set(key, sum);
}
return tracker.get(key);
};