Skip to content

Commit 3107450

Browse files
Update 1155-number-of-dice-rolls-with-target-sum.java
1 parent 5076489 commit 3107450

File tree

1 file changed

+39
-14
lines changed

1 file changed

+39
-14
lines changed
Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,47 @@
1+
/* Top Down Method
2+
-----------------------------------*/
13
class Solution {
2-
3-
int mod = 1000000007;
4+
int MOD = (int)1e9 + 7;
5+
Map<String, Integer> memo;
46

57
public int numRollsToTarget(int n, int k, int target) {
6-
if (target > n * k || target < n) return 0;
7-
if (n == 1) return target < n ? 0 : 1;
8-
int[][] dp = new int[n + 1][target + 1];
9-
return helper(n, k, target, dp);
8+
memo = new HashMap<>();
9+
return count(n, k, target);
10+
}
11+
12+
private int count(int n, int k, int target){
13+
String currState = n + "," + target;
14+
if(n == 0)
15+
return (target == 0)? 1: 0;
16+
if(memo.containsKey(currState))
17+
return memo.get(currState);
18+
19+
int res = 0;
20+
for(int val = 1; val < k + 1; val++)
21+
res = (res + count(n - 1, k, target - val)) % MOD;
22+
memo.put(currState, res);
23+
return res;
1024
}
25+
}
26+
27+
/* Bottom Up Method
28+
-----------------------------------------*/
29+
class Solution {
30+
public int numRollsToTarget(int n, int k, int target) {
31+
int[] dp = new int[target + 1];
32+
dp[0] = 1;
33+
int MOD = (int) 1e9 + 7;
34+
35+
for(int dice = 0; dice < n; dice++){
36+
int[] next_dp = new int[target + 1];
1137

12-
public int helper(int n, int k, int target, int[][] dp) {
13-
if (target > n * k || target < n) return 0;
14-
if (target == 0 && n == 0) return 1;
15-
if (dp[n][target] != 0) return dp[n][target];
16-
int sum = 0;
17-
for (int i = 1; i <= k; i++) {
18-
sum = (sum + helper(n - 1, k, target - i, dp)) % mod;
38+
for(int val = 1; val < k + 1; val++){
39+
for(int total = val; total < target + 1; total++){
40+
next_dp[total] = (next_dp[total] + dp[total - val]) % MOD;
41+
}
42+
}
43+
dp = next_dp;
1944
}
20-
return dp[n][target] = sum;
45+
return dp[target];
2146
}
2247
}

0 commit comments

Comments
 (0)