[LeetCode]174 Dungeon Game
1354 ワード
https://oj.leetcode.com/problems/dungeon-game/
public class Solution {
public int calculateMinimumHP(int[][] map)
{
// DP
// Define a 2D M*N array blood.
// blood[i][j] means the min blood when arrive this point.
// So, the last point, blood[m - 1][n - 1] = 1
//
// blood[i][j] = max(1, // At least 1
// min( blood[i][j + 1] - map[i][j + 1] , // go right
// blood[i + 1][j] - map[i + 1][j] )) // go up
//
//
if (map == null)
return 0; // Invalid
int m = map.length;
int n = map[0].length;
int[][] blood = new int[m][n];
blood[m - 1][n - 1] = 1;
for (int i = m - 1 ; i >= 0 ; i --)
{
for (int j = n - 1 ; j >= 0 ; j --)
{
if (i == m - 1 && j == n - 1)
continue;
int right = j + 1 < n ? blood[i][j + 1] - map[i][j + 1] : Integer.MAX_VALUE;
int up = i + 1 < m ? blood[i + 1][j] - map[i + 1][j] : Integer.MAX_VALUE;
blood[i][j] = Math.max(1, Math.min(right, up));
}
}
return Math.max(1, blood[0][0] - map[0][0]);
}
}