首页 > 其他 > 详细

LeetCode 174. 地下城游戏

时间:2020-07-12 21:23:47      阅读:64      评论:0      收藏:0      [点我收藏+]

题目链接

174. 地下城游戏

题目分析

今天做题翻车了,从左上角往右下走考虑的cases好多,直接没做出来翻车。后来看了评论区才得出下面的答案。。
我们从右下角开始做会比较容易理解了,dp[i][j]代表进入dungeon[i][j]的地方需要的最小生命值。
我们这个最小生命值其实取决于其(右侧和下方的最小生命值)-dungeon[i][j]和1比较的较大值。
和1比较主要是如果这个房间如果是正数,是可以加血的,我们进这个房间只需要最小的生命值即可(题目说最小生命值为1,小于等于0就会立刻死亡)
然后我们只需要对终点和两个编辑情况进行单独判断即可。

代码实现

class Solution {
    public int calculateMinimumHP(int[][] dungeon) {
        int row=dungeon.length;
        int col=dungeon[0].length;
        //这个数组表示在i,j位置骑士需要的最小生命值
        int[][] dp=new int[row][col];
        for(int i=row-1;i>=0;i--){
        	for(int j=col-1;j>=0;j--){
        		if(i==row-1&&j==col-1){ //终点的情况
        			dp[i][j]=Math.max(1, 1-dungeon[i][j]);
        		}else if(i==row-1){ //最后一行的情况
        			dp[i][j]=Math.max(1, dp[i][j+1]-dungeon[i][j]);
        		}else if(j==col-1){ //最后一列的情况
        			dp[i][j]=Math.max(1, dp[i+1][j]-dungeon[i][j]);
        		}else{	
        			dp[i][j]=Math.max(1, Math.min(dp[i+1][j],dp[i][j+1])-dungeon[i][j]);
        		}
        	}
        }
        return dp[0][0];
    }
}

LeetCode 174. 地下城游戏

原文:https://www.cnblogs.com/ZJPaang/p/13289551.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!