Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time.
Example:
Input: [ [1,3,1], [1,5,1], [4,2,1] ] Output: 7 Explanation: Because the path 1→3→1→1→1 minimizes the sum.
这道题解题关键是看到,到达每个格子的最小路径是这个格子的数目加上它左边或者上面格子中二者较小的那一个。因此我们可以从上向下,从左向右依次得出到达每个格子的最短路径,右下角的格子就是题解。
由于题目未说明能否修改原本的二维数组,这里就直接对原数组进行了修改。
class Solution:
def minPathSum(self, grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
for n in range(1,len(grid[0])):
grid[0][n] = grid[0][n - 1] + grid[0][n]
for num in range(1,len(grid)):
grid[num][0] = grid[num - 1][0] + grid[num][0]
for n in range(1,len(grid[0])):
grid[num][n] = min(grid[num - 1][n], grid[num][n - 1]) + grid[num][n]
return grid[len(grid) - 1][len(grid[0]) - 1]