1.题目
2.思路
(1)确定状态
d
p
[
i
]
[
j
]
dp[i][j]
dp[i][j]表示从
(
i
,
j
)
(i,j)
(i,j)到右下角(终点)的最短路径
(2)转移方程
(3)初始条件+边界条件
dp[0][0] = grid[0][0]
(4)计算顺序
i和j均从0开始即可。
注意:
(超级牛逼题解——也要学学回溯->记忆化搜索->dp->空间压缩)
3.代码
class Solution:
def minPathSum(self, grid: List[List[int]]) -> int:
m = len(grid) # 行数
n = len(grid[0]) # 列数
dp = [[0] * n for k in range(m)]
dp[0][0] = grid[0][0]
for i in range(m):
for j in range(n):
if i == 0 and j!= 0:# 第一行
dp[i][j] = grid[i][j] + dp[i][j - 1]
elif i != 0 and j == 0: # 第一列
dp[i][j] = grid[i][j] + dp[i - 1][j]
elif i != 0 and j != 0:
dp[i][j] = grid[i][j] + min(dp[i - 1][j], dp[i][j - 1])
return dp[m - 1][n - 1]