LeetCode --- 64.最小路径和

该博客探讨了LeetCode第64题的解决策略,即如何找到一个非负整数网格中从左上角到右下角的最小路径和。通过从最右下角逆向计算,每次迭代时,当前单元格的路径和等于其自身值加上其右侧或下方单元格的最小路径和。博主提供了详细的解释和代码实现。

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

题目:

给定一个只含非负整数的 m x n 网格,找到一条从左上角到右下角的可以使数字之和最小的路径。

注意: 每次只能向下或者向右移动一步。

示例 1:

[[1,3,1],
 [1,5,1],
 [4,2,1]]

根据上面的数组,返回 7. 因为路径 1→3→1→1→1 总和最小。

思路:

参考上一篇的62题,其实思路完全一样,不考虑使用迭代的形式,而是考虑从最右下角开始往上追溯。

路径总长为0时,直接返回0。

其余情况下,如果起点格在最底或者最右,那么其到终点的路径长度等于自身的数值加上其右边或者下边格子到终点的路径数;如果起点不在最底或者最右,那么其到终点的路径长度等于自身的数值加上以其右边和下边格子为起点的路径数的最小值,这一段可能比较拗口,以理解为主。

总的来说还是一个迭代的计算方式。

代码:

class Solution {
    public int minPathSum(int[][] grid) {
        int m = grid.length;
        int n = 0;
        if(m > 0)
            n = grid[m-1].length;
        else
            return 0;
        int[][] num = new int[m][n];
        for (int i = m-1;i >= 0;i--){
            for (int j = n-1;j >= 0;j--){
                if(i == m-1 && j == n-1)
                    num[i][j] = grid[i][j];
                else if (i == m-1)
                    num[i][j] = grid[i][j] + num[i][j+1];
                else if (j == n-1)
                    num[i][j] = grid[i][j] + num[i+1][j];
                else
                    num[i][j] = grid[i][j] + Math.min(num[i+1][j],num[i][j+1]);
            }
        }
        return num[0][0];
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值