leetcode 每日一题 64. 最小路径和

动态规划

思路:

dp[i][j]表示走完 i,j 位置所需的最短路径,由于只能向下或者向右,所以第一行和第一列中每个值为当前值加上前一个值,即dp[0][j]=dp[0]

[j]+dp[0][j-1],dp[i][0] = dp[i][0]+dp[i-1][0]。非第一行和第一列的值为当前值加上其上边与左边中的较小值,即dp[i][j] = dp[i][j] + min(dp[i-1]

[j],dp[i][j-1])

代码:

class Solution:
    def minPathSum(self, grid: List[List[int]]) -> int:
        if not grid:
            return 0
        rowSize = len(grid)
        colSize = len(grid[0])
        for i in range(1,colSize):
            grid[0][i] = grid[0][i] + grid[0][i-1]
        for j in range(1,rowSize):
            grid[j][0] = grid[j][0] + grid[j-1][0]
        for i in range(1,rowSize):
            for j in range(1,colSize):
                grid[i][j] = grid[i][j]+min(grid[i-1][j],grid[i][j-1])
        return grid[-1][-1]

 

posted @ 2020-06-07 13:53  nil_f  阅读(110)  评论(0)    收藏  举报