LeetCode刷题之64.最小路径和

LeetCode刷题之64.最小路径和

我不知道将去向何方,但我已在路上!
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 !
  • 题目
    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
  • 说明
    每次只能向下或者向右移动一步。
  • 示例
输入:
[
  [1,3,1],
  [1,5,1],
  [4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。
  • 代码:
class Solution:
    def minPathSum(self, grid: List[List[int]]) -> int:    
        dp = [[0]*len(grid[0])]*len(grid)
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                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]
                if i >= 1 and j >= 1:
                    dp[i][j] = min(dp[i][j-1] + grid[i][j],dp[i-1][j] + grid[i][j])
        return dp[-1][-1]
# 执行用时 :132 ms, 在所有 Python3 提交中击败了77.89%的用户
# 内存消耗 :14.3 MB, 在所有 Python3 提交中击败了89.01%的用户
  • 算法说明:
    采用动态规划算法,建立一个和grid一样大小的全为0的动态矩阵dp,对照矩阵grid对矩阵dp进行更新。先将第一行和第一列分别采取向右和向下的办法进行更新,然后更新其他的值,dp中每一个元素,求出其上方和左方的较小者,然后和自身的加和来更新。具体过程如下:
发布了90 篇原创文章 · 获赞 1 · 访问量 1043

猜你喜欢

转载自blog.csdn.net/qq_34331113/article/details/103522408
今日推荐