这类问题的解决思路往往都是动态规划
参考 https://blog.csdn.net/u014615155/article/details/77941488
对于网格中的元素grid[i][j],从最上角的元素grid[0][0]走到它的最短距离为:
grid[i][j]=min(grid[i-1][j],grid[i][j-1])+grid[i][j]
因此,这题的思路是:首先计算出第一行和第一列,从左到右,从上到下的步数。然后从第二行第二列开始,采用动态规划的方法。
class Solution:
def minPathSum(self, grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
m = len(grid)
n = 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]=min(grid[i-1][j],grid[i][j-1])+grid[i][j]
return grid[-1][-1]