题目描述
解题思路
求终点最小路径和,最简单的二维数组dp。
dp[i][j]表示坐标(i,j)的最小路径和。
当没有越界时
dp[i][j]=min(dp[i-1][j]+dp[i][j-1])+grid[i][j]#当没越界时能从左边和上面位置走来
当有越界时
if x-1<0 and y-1<0:
dp[x][y]=grid[x][y]#在第一个位置
continue
if x-1<0:
dp[x][y]=dp[x][y-1]+grid[x][y]#左边越界,只能从上面来
continue
if y-1<0:
dp[x][y]=dp[x-1][y]+grid[x][y]#上面越界,只能从左边来
continue
代码
class Solution:
def minPathSum(self, grid: List[List[int]]) -> int:
m=len(grid)
n=len(grid[0])
dp=[[0]*n for _ in range(m)]
for x in range(m):
for y in range(n):
if x-1<0 and y-1<0:
dp[x][y]=grid[x][y]#在第一个位置
continue
if x-1<0:
dp[x][y]=dp[x][y-1]+grid[x][y]#左边越界,只能从上面来
continue
if y-1<0:
dp[x][y]=dp[x-1][y]+grid[x][y]#上面越界,只能从左边来
continue
dp[x][y]=min(dp[x-1][y],dp[x][y-1])+grid[x][y]
return dp[m-1][n-1]