题目描述:给定一个包含非负整数的 m x n 矩阵,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
要求:从左上角第一个数字开始,只能向下或向右。
题目分析:题目要求找打最小路径和,需要解决N个小问题,然后这N个小问题的答案就是这个问题的答案。本问题属于动态规划。
python代码如下:
class Solution:
def minPathSum(self, grid: List[List[int]]) -> int:
for i in range(len(grid)):
for j in range(len(grid[0])):
if i==0 and j==0:
continue
elif i==0:
grid[i][j]+=grid[i][j-1]
elif j==0:
grid[i][j]+=grid[i-1][j]
else:
grid[i][j]+=min(grid[i-1][j],grid[i][j-1])
return grid[-1][-1]
代码分析:由于只能向下或向右,所以要考虑边界情况:
我们从第一行开始逐行计算。第一个数字保持不变,第二个数字是行边界,只能与前一个数字相加,为了减少空间消耗,我们在grid原矩阵进行修改:grid[0][1]=grid[0][1]+grid[0][0]。第一行的数字按照此规律以此进行。第二行数字第一个为左边界,只能与上面数字进行加,grid[1][0]=gride[1][0]+gride[0][0],第二个数字与上和左最小数字进行加。按照这三种情况进行循环迭代。矩阵最后一个数字就是最小路径和。
Leetcod执行情况: