Description
![]()
Solution
class Solution {
public int calculateMinimumHP(int[][] dungeon) {
if(dungeon== null|| dungeon.length ==0||dungeon[0].length==0){
return 0;
}
//Reverse Dynamic Programming.
// Border Scenario
//Right-most column
int row = dungeon.length;
int col = dungeon[0].length;
int [][] dp = new int [row][col];
dp[row-1][col-1] = dungeon[row-1][col-1]>0? 0: -dungeon[row-1][col-1];
for(int i = row-2; i>=0; i-- ){
dp[i][col-1] = Math.max(0, dp[i+1][col-1]-dungeon[i][col-1]);
}
//Down-most row;
for(int j = col-2; j>=0; j--){
dp[row-1][j] = Math.max(0,dp[row-1][j+1] -dungeon[row-1][j] );
}
//middle;
for(int i = row-2; i>=0;i--){
for(int j= col-2; j>=0; j--){
dp[i][j] = Math.max(0,Math.min(dp[i][j+1],dp[i+1][j]) - dungeon[i][j]);
}
}
return dp[0][0]+1;
}
}