Skip to content

Commit 0e4d15f

Browse files
committed
minimum path falling sum DP
1 parent a952c77 commit 0e4d15f

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed
+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*https://leetcode.com/problems/minimum-path-sum/
2+
* dp easy, striver op
3+
*
4+
*/
5+
6+
private class Recursion {
7+
8+
public int minPathSum(int[][] grid) {
9+
int n = grid.length;
10+
int m = grid[0].length;
11+
return recursion(n - 1, m - 1, grid);
12+
}
13+
14+
private int recursion(int i, int j, int[][] grid) {
15+
if (i == 0 && j == 0) return grid[0][0];
16+
if (i < 0 || j < 0) return Integer.MAX_VALUE;
17+
int up = recursion(i - 1, j, grid); // travelling from upside
18+
int left = recursion(i, j - 1, grid); // travelling from righside
19+
return grid[i][j] + Math.min(up, left);
20+
}
21+
}
22+
23+
private class memoization {
24+
int dp[][];
25+
26+
public int minPathSum(int[][] grid) {
27+
int n = grid.length;
28+
int m = grid[0].length;
29+
dp = new int[n][m];
30+
for (int a[] : dp) {
31+
Arrays.fill(a, -1);
32+
}
33+
return recursion(n - 1, m - 1, grid);
34+
}
35+
36+
private int recursion(int i, int j, int[][] grid) {
37+
if (i == 0 && j == 0) return grid[0][0];
38+
if (i < 0 || j < 0) return Integer.MAX_VALUE;
39+
if (dp[i][j] != -1) return dp[i][j];
40+
int up = recursion(i - 1, j, grid); // travelling from upside
41+
int left = recursion(i, j - 1, grid); // travelling from righside
42+
return dp[i][j] = grid[i][j] + Math.min(up, left);
43+
}
44+
}
45+
46+
private class tabulation {
47+
int dp[][];
48+
49+
public int minPathSum(int[][] grid) {
50+
int n = grid.length;
51+
int m = grid[0].length;
52+
dp = new int[n][m];
53+
for (int a[] : dp) {
54+
Arrays.fill(a, -1);
55+
}
56+
for (int i = 0; i < n; i++) {
57+
for (int j = 0; j < m; j++) {
58+
if (i == 0 && j == 0) dp[i][j] = grid[i][j];
59+
if (dp[i][j] != -1) continue; else if (i == 0 && j != 0) dp[i][j] =
60+
grid[i][j] + dp[i][j - 1]; else if (i != 0 && j == 0) dp[i][j] =
61+
grid[i][j] + dp[i - 1][j]; else {
62+
dp[i][j] = grid[i][j] + Math.min(dp[i - 1][j], dp[i][j - 1]);
63+
}
64+
}
65+
}
66+
67+
return dp[n - 1][m - 1];
68+
}
69+
}

0 commit comments

Comments
 (0)