|
@@ -0,0 +1,17 @@
|
|
|
+class Solution {
|
|
|
+ public int calculateMinimumHP(int[][] dungeon) {
|
|
|
+ int m, n;
|
|
|
+ if ((m = dungeon.length) == 0 || (n = dungeon[0].length) == 0) return 1;
|
|
|
+ int[][] dp = new int[m + 1][n + 1];
|
|
|
+ // dp[i][j] = max(1, min(dp[i + 1][j], dp[i][j + 1]) - dungeon[i][j])
|
|
|
+ for (int i = 0; i < m - 1; i++) dp[i][n] = Integer.MAX_VALUE;
|
|
|
+ for (int i = 0; i < n - 1; i++) dp[m][i] = Integer.MAX_VALUE;
|
|
|
+ dp[m][n - 1] = 1;
|
|
|
+ dp[m - 1][n] = 1;
|
|
|
+ for (int i = m - 1; 0 <= i; i--)
|
|
|
+ for (int j = n - 1; 0 <= j; j--)
|
|
|
+ dp[i][j] = Math.max(1, Math.min(dp[i + 1][j], dp[i][j + 1]) - dungeon[i][j]);
|
|
|
+ // Arrays.stream(dp).forEach((int[] row) -> System.out.println(Arrays.stream(row).boxed().collect(Collectors.toList())));
|
|
|
+ return dp[0][0];
|
|
|
+ }
|
|
|
+}
|