| 1234567891011121314151617 | 
							- 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];
 
-     }
 
- }
 
 
  |