题目描述:
题解:
采用动态规划的方法,列出表格对每个位置求从左上角到该位置的最短距离,记录为dp_memo
1.最左上位置的最短路径即为grid[0][0]
2.对m*n 网格的第一排,只有从左边网格向右移动得到,dp_memo[i][0]=dp[i-1][0]+grid[i][j]
3.对m*n网格第一列,只有从上面网格向下移动得到,dp_memo[0][j]=dp_memo[0][j-1]+grid[i][j]
4.对其他位置,最短距离从左边网格向右移动或上面网格向下移动得到,
则dp_memo[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i][j]
class Solution(object): def minPathSum(self, grid): m = len(grid) n = len(grid[0]) dp_memo = [[0 for j in range(n)]for i in range(m)] dp_memo[0][0]=grid[0][0] for i in range(1,m): dp_memo[i][0]=dp_memo[i-1][0]+grid[i][0] for j in range(1,n): dp_memo[0][j]=dp_memo[0][j-1]+grid[0][j] for i in range(1,m): for j in range(1,n): dp_memo[i][j]=min(dp_memo[i-1][j],dp_memo[i][j-1])+grid[i][j] return dp_memo[m-1][n-1]
结果: