赞
踩
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例:
- 输入:
- [
- [1,3,1],
- [1,5,1],
- [4,2,1]
- ]
- 输出: 7
- 解释: 因为路径 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]。
- class Solution:
- def minPathSum(self, grid):
- """
- :type grid: List[List[int]]
- :rtype: int
- """
- dp=grid
- for i in range(len(grid)):
- for j in range(len(grid[0])):
- if i==0 :
- if j!=0:
- dp[i][j]=grid[i][j-1]+grid[i][j]
- elif j==0:
- dp[i][j]=grid[i-1][j]+grid[i][j]
- else:
- dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i][j]
- return dp[i][j]
'运行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。