Skip to content

Commit 20dfdb9

Browse files
committed
Time: 238 ms (70.14%), Space: 119.6 MB (91.23%) - LeetHub
1 parent 3da4db6 commit 20dfdb9

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

2435-paths-in-matrix-whose-sum-is-divisible-by-k/2435-paths-in-matrix-whose-sum-is-divisible-by-k.cpp

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,38 @@ class Solution {
1616
int numberOfPaths(vector<vector<int>>& grid, int k) {
1717
int n = grid.size();
1818
int m = grid[0].size();
19-
vector<vector<vector<int>>>Dp(n,vector<vector<int>>(m,vector<int>(k)));
20-
// Tabulation
21-
for(int s = 0; s < k; s++)if((s + grid[0][0]) % k == 0)Dp[0][0][s] = 1;
22-
for(int i = 0; i < n; i++){
19+
// vector<vector<vector<int>>>Dp(n,vector<vector<int>>(m,vector<int>(k)));
20+
// // Tabulation
21+
// for(int s = 0; s < k; s++)if((s + grid[0][0]) % k == 0)Dp[0][0][s] = 1;
22+
// for(int i = 0; i < n; i++){
23+
// for(int j = 0; j < m; j++){
24+
// for(int s = 0; s < k; s++){
25+
// if(i > 0)Dp[i][j][s] = (Dp[i][j][s] + Dp[i - 1][j][(s + grid[i][j]) % k]) % 1000000007;
26+
// if(j > 0)Dp[i][j][s] = (Dp[i][j][s] + Dp[i][j - 1][(s + grid[i][j]) % k]) % 1000000007;
27+
// }
28+
// }
29+
// }
30+
// return Dp[n - 1][m - 1][0];
31+
32+
// Space Optimization
33+
vector<vector<int>>prev(m,vector<int>(k));
34+
for(int s = 0; s < k; s++)if((s + grid[0][0]) % k == 0)prev[0][s] = 1;
35+
36+
for(int j = 1; j < m; j++)
37+
for(int s = 0; s < k; s++)
38+
prev[j][s] += prev[j - 1][(s + grid[0][j]) % k];
39+
40+
for(int i = 1; i < n; i++){
41+
vector<vector<int>>curr(m,vector<int>(k));
2342
for(int j = 0; j < m; j++){
2443
for(int s = 0; s < k; s++){
25-
if(i > 0)Dp[i][j][s] = (Dp[i][j][s] + Dp[i - 1][j][(s + grid[i][j]) % k]) % 1000000007;
26-
if(j > 0)Dp[i][j][s] = (Dp[i][j][s] + Dp[i][j - 1][(s + grid[i][j]) % k]) % 1000000007;
44+
if(i > 0)curr[j][s] = (curr[j][s] + prev[j][(s + grid[i][j]) % k]) % 1000000007;
45+
if(j > 0)curr[j][s] = (curr[j][s] + curr[j - 1][(s + grid[i][j]) % k]) % 1000000007;
46+
2747
}
2848
}
49+
prev = curr;
2950
}
30-
return Dp[n - 1][m - 1][0];
51+
return prev[m - 1][0];
3152
}
3253
};

0 commit comments

Comments
 (0)