174.dungeon-game.java 826 B

1234567891011121314151617
  1. class Solution {
  2. public int calculateMinimumHP(int[][] dungeon) {
  3. int m, n;
  4. if ((m = dungeon.length) == 0 || (n = dungeon[0].length) == 0) return 1;
  5. int[][] dp = new int[m + 1][n + 1];
  6. // dp[i][j] = max(1, min(dp[i + 1][j], dp[i][j + 1]) - dungeon[i][j])
  7. for (int i = 0; i < m - 1; i++) dp[i][n] = Integer.MAX_VALUE;
  8. for (int i = 0; i < n - 1; i++) dp[m][i] = Integer.MAX_VALUE;
  9. dp[m][n - 1] = 1;
  10. dp[m - 1][n] = 1;
  11. for (int i = m - 1; 0 <= i; i--)
  12. for (int j = n - 1; 0 <= j; j--)
  13. dp[i][j] = Math.max(1, Math.min(dp[i + 1][j], dp[i][j + 1]) - dungeon[i][j]);
  14. // Arrays.stream(dp).forEach((int[] row) -> System.out.println(Arrays.stream(row).boxed().collect(Collectors.toList())));
  15. return dp[0][0];
  16. }
  17. }