LeetCode刷题——64. 最小路径和

本文介绍了一个经典的动态规划问题,即在给定的mxn网格中寻找从左上角到右下角的路径,使得路径上的数字总和最小。文章详细阐述了如何使用自底向上的动态规划方法解决此问题,并提供了Python代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例:

输入:
[
  [1,3,1],
  [1,5,1],
  [4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-path-sum

思路

这个题目和120. 三角形最小路径和很像,解法是类似的。

所以这里直接通过自底向上动态规划的方式来求解。沿着移动方向相反的方向,即从右下角开始计算,向上或向左。

需要考虑边界情况。

class Solution:
    def minPathSum(self, grid: List[List[int]]) -> int:
        # 从右下角开始计算,向上或向左
        m, n = len(grid), len(grid[0])  # m x n 的矩阵

        for col in range(n - 2, -1, -1):
            grid[m - 1][col] += grid[m - 1][col + 1]  # 最后一层(m-1)的直接向左累加

        for row in range(m - 2, -1, -1):
            grid[row][n - 1] += grid[row + 1][n - 1]  # 最后一列(n-1)只要向上计算即可

		# 上面是考虑边界情况
        for row in range(m - 2, -1, -1):  # 从倒数第2层开始
            for col in range(n - 2, -1, -1):  # 从倒数第2列开始
                grid[row][col] += min(
                    grid[row + 1][col], grid[row][col + 1]
                )

        return grid[0][0]

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愤怒的可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值