示例:
给定一个包含非负整数的m*n网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出:7(即最小路径和为1+3+1+1+1=7 )
说明
1、用同样的m*n网格记录从左上角到[i,j]的路径
# -*- coding:UTF-8 -*-
class Solution:
def minPathSum(self,grid):
m = len(grid)
n = len(grid[0])
f =[[0]*n for i in range(m)]
f[0][0] = grid[0][0]
for i in range(1,m):
f[i][0] = grid[i][0] +f[i-1][0]
for j in range(1,n):
f[0][j] = grid[0][j] +f[0][j-1]
for i in range(1,m):
for j in range(1,n):
f[i][j] = min(f[i-1][j],f[i][j-1])+grid[i][j]
return f[m-1][n-1]
c= [[1,3,1],[1,5,1],[4,2,1]]
result = Solution()
print(result.minPathSum(c))