- 64. 最小路径和(Medium)
- 329. 矩阵中的最长递增路径(Hard)
- 797. (有向无环图)所有可能的路径(Medium)/ 1575. (汽车加油问题)统计所有可行路径(Hard)/ 332. 重新安排行程(Hard)/ 753. 破解保险箱(H)(欧拉回路!!)
- 931.【正方形】下降路径最小和(Medium)/ 120.【三角形】最小路径和(Medium)
- 62. (2个方向)不同路径(Medium)/ 63. (2个方向 + 障碍)不同路径 II(Medium)
- 剑指Offer 13. 机器人的运动范围(Medium)
- 1293. (消除k个障碍物)网格中的最短路径(Hard)/ 174. 地下城游戏(计算骑士所需的最低生命值,Hard)/ 1368. 使网格图至少有一条有效路径的最小代价(Hard)
- 剑指Offer 12. 矩阵中的字符串路径(M)/ 212. 单词搜索 II(H)
剑指Offer 47. 礼物的最大价值(Medium)
class Solution:
### 1206 动态规划(40 ms,14.7 MB)
def maxValue(self, grid: List[List[int]]) -> int:
m, n = len(grid), len(grid[0])
# 直接先计算第一行(第一行中每个格子的值只会来源于左边一个格子)
for j in range(1, n):
grid[0][j] += grid[0][j-1]
# 直接先计算第一列(第一列中每个格子的值只会来源于上面一个格子)
for i in range(1, m):
grid[i][0] += grid[i-1][0]
for i in range(1, m):
for j in range(1, n):
grid[i][j] += max(grid[i][j-1], grid[i-1][j]) # 当前格子的最大值只会来源于:上面格子中的最大值 或 左边格子中的最大值
return grid[-1][-1]