当前位置:   article > 正文

64. 最小路径和(python)_输入起点坐标 终点坐标 点集组成的区域列表 求不穿过区域且从起点到终点的最

输入起点坐标 终点坐标 点集组成的区域列表 求不穿过区域且从起点到终点的最

题目描述(中等)

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例:

  1. 输入:
  2. [
  3.   [1,3,1],
  4. [1,5,1],
  5. [4,2,1]
  6. ]
  7. 输出: 7
  8. 解释: 因为路径 1→3→1→1→1 的总和最小。

思路分析

新建一个m*n的dp矩阵记录网格矩阵grid到达每一个路径的中间过程数值和。当处于第一列时候(j=0),dp[i][j]=grid[i-1][j]+grid[i][j]; 第一行时候(i=0),dp[i][j]=grid[i][j-1]+grid[i][j]。而在其它位置时候,dp[i][j]就等于它的上方或者左方格子数值最小的值加上grid当前格子的值,即:dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i][j]。

实现代码

  1. class Solution:
  2. def minPathSum(self, grid):
  3. """
  4. :type grid: List[List[int]]
  5. :rtype: int
  6. """
  7. dp=grid
  8. for i in range(len(grid)):
  9. for j in range(len(grid[0])):
  10. if i==0 :
  11. if j!=0:
  12. dp[i][j]=grid[i][j-1]+grid[i][j]
  13. elif j==0:
  14. dp[i][j]=grid[i-1][j]+grid[i][j]
  15. else:
  16. dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i][j]
  17. return dp[i][j]
'
运行

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/969957
推荐阅读
相关标签
  

闽ICP备14008679号