174. 地下城游戏
解法一:dp
class Solution:
def calculateMinimumHP(self, dungeon: List[List[int]]) -> int:
n = len(dungeon)
m = len(dungeon[0])
hp = [[0] * m for _ in range(n)] #dp
#初始化,处理边界
#终点
need = 1 - dungeon[n-1][m-1]
hp[n-1][m-1] = need if need > 0 else 1
#右边界
for i in range(n-2, -1, -1):
need = hp[i+1][m-1] - dungeon[i][m-1]
hp[i][m-1] = need if need > 0 else 1
#下边界
for j in range(m-2, -1, -1):
need = hp[n-1][j+1] - dungeon[n-1][j]
hp[n-1][j] = need if need > 0 else 1
#其他区域
for i in range(n-2, -1, -1):
for j in range(m-2, -1, -1):
need = min(hp[i+1][j], hp[i][j+1]) - dungeon[i][j]
hp[i][j] = need if need > 0 else 1
return hp[0][0]最后更新于