描述
给定一个只含非负整数的
m
∗
n
m*n
m∗n网格,找到一条从左上角到右下角的可以使数字和最小的路径。
你在同一时间只能向下或者向右移动一步
样例
样例 1:
输入:
grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:
7
解释:
路线为: 1 -> 3 -> 1 -> 1 -> 1
样例 2:
输入:
grid = [[1,3,2]]
输出:
6
解释:
路线是: 1 -> 3 -> 2
class Solution:
"""
@param grid: a list of lists of integers
@return: An integer, minimizes the sum of all numbers along its path
"""
def minPathSum(self, grid):
# write your code here
if grid is None:
return 0
rowlen = len(grid) # 行数
collen = len(grid[0]) # 列数
dp = []
for i in range(rowlen):
dp.append([0] * collen) # 创建二维数组,用于记录到当前位置所走的最小路径和
for i in range(rowlen):
for j in range(collen):
if i == 0 and j == 0:
dp[i][j] = grid[i][j]
elif i == 0 and j > 0:
dp[i][j] = dp[i][j-1] + grid[i][j]
elif j == 0 and i > 0:
dp[i][j] = dp[i-1][j] + grid[i][j]
else:
dp[i][j] = min(dp[i-1][j],dp[i][j-1]) + grid[i][j]
return dp[-1][-1]