1. 程式人生 > 實用技巧 >leetcode-174-地下城遊戲

leetcode-174-地下城遊戲

題目描述:

方法一:動態規劃 O(mn) O(mn)

class Solution:
    def calculateMinimumHP(self, dungeon: List[List[int]]) -> int:
        rows = len(dungeon)
        cols = len(dungeon[0])
        dp = [[1]*cols for _ in range(rows)]
        for x in range(cols-1,-1,-1):
            for y in range(rows-1,-1,-1):
                
if x==cols-1 and y==rows-1: dp[y][x] = max(1,1-dungeon[y][x]) continue if x==cols-1: dp[y][x] = max(1,dp[y+1][x]-dungeon[y][x]) continue if y==rows-1: dp[y][x] = max(1,dp[y][x+1]-dungeon[y][x])
continue dp[y][x] = min(max(1,dp[y+1][x]-dungeon[y][x]),max(1,dp[y][x+1]-dungeon[y][x])) return dp[0][0]

官方:

class Solution:
    def calculateMinimumHP(self, dungeon: List[List[int]]) -> int:
        n, m = len(dungeon), len(dungeon[0])
        BIG = 10**9
        dp = [[BIG] * (m + 1) for
_ in range(n + 1)] dp[n][m - 1] = dp[n - 1][m] = 1 for i in range(n - 1, -1, -1): for j in range(m - 1, -1, -1): minn = min(dp[i + 1][j], dp[i][j + 1]) dp[i][j] = max(minn - dungeon[i][j], 1) return dp[0][0]