leetcode-174-地下城遊戲
阿新 • • 發佈:2020-07-13
題目描述:
方法一:動態規劃 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]