【LeetCode】64. Minimum Path Sum 解题报告(Python)

127 篇文章 2 订阅
102 篇文章 2 订阅

题目分析:

这一题与【LeetCode】62. Unique Paths【LeetCode】63. Unique Paths II相似度很高,这次是每次走的路径长度给定了,求的是最短路径,可以建立二维dp数组解决,属于较简单的动态规划。其实题目也就是让求有向图的最短路径问题。

解题思路:

我们创建一个与原数组行列相同的dp数组,dp数组从左上更新到右下,过程如图:从左上出发,可以向右或者向下走,故每个点的路径数等于dp数组该位置的值加上原数组该点上面或左面较小的那个值,如图所示过程。(说明:过程并不是按双重循环走的,图示为了方便省略了第一行与第一列的产生方式)在产生第一行(第一列)由于它不能和上面(左面)的比较,故让它和一个较大的数比较,或者单独判断是否为第一行(列)也可以解决。

在这里插入图片描述
测试代码:

class Solution:
    def minPathSum(self, grid: list):
        r_len = len(grid)
        c_len = len(grid[0])
        dp = [[0] * c_len for i in range(r_len)]
        for i in range(r_len):
            for j in range(c_len):
                if i == j == 0: dp[i][j] = grid[i][j]
                else:
                    y = 2147483647 if i - 1 < 0 else dp[i - 1][j]
                    x = 2147483647 if j - 1 < 0 else dp[i][j - 1]
                    dp[i][j] = grid[i][j] + min(x, y)
        return dp[-1][-1]

print(Solution().minPathSum([[1, 3, 1],[1, 5, 1],[4, 2, 1]]))   #提交时请删除该行

参考博客1参考博客2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值