【LeetCode】解题64:Minimum Path Sum

本篇博客介绍了LeetCode第64题的解决方案,即找到一个非负数网格从左上角到右下角的最小路径和。通过动态规划的方法,利用状态方程`sum[i,j]=min{sum[i,j−1],sum[i−1,j]}+grid[i,j]`来求解。博主提供了详细的解题思路和Java代码实现,算法的时间复杂度为O(m*n),空间复杂度为O(n)。" 123188394,10969852,Apache ShardingSphere SQL Parse Format 深度解析,"['数据库', 'SQL', 'Apache', 'ShardingSphere', '中间件']

Problem 64: Minimum Path Sum [Medium]

Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.

Note: You can only move either down or right at any point in time.

Example:

Input:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
Output: 7
Explanation: Because the path 1→3→1→1→1 minimizes the sum.

来源:LeetCode

解题思路

动态规划题,解题思路与Problem 62 Unique Paths类似。

状态方程:
s u m [ i , j ] = min ⁡ { s u m [ i , j − 1 ] , s u m [ i − 1 , j ] } + g r i d [ i , j ] sum[i, j] = \min\{sum[i, j-1], sum[i-1, j]\} + grid[i, j] sum[i,j]=min{sum[i,j1],sum[i1,j]}+grid[i,j]
每一格可以通过左边格/上边格到达,因此取左边一格与上边一格的数字和中的较小值,再加上当前格的值grid[i, j],即为到达当前格的最小数字和。

具体思路:

  • Unique Paths题解可知,实现该状态方程只需要创建一个长度为n的一维数组:sum[n]。
  • 初始化:sum[0] = 0,sum[1~n-1] = MAX_VALUE.
  • 双重循环:
    a. 第一重循环:计算每行首列的值,即sum[0]。由于第一列只能由上边一格到达,因此不需要比较出最小值,只需要叠加上边格的值,更新公式为:sum[0] = sum[0] + grid[i, 0]。
    b. 第二重循环:计算每行当前格方法个数公式:sum[j] = min(sum[j-1], sum[j]) + grid[i, j]。

整个算法时间复杂度为 O ( m ∗ n ) O(m*n) O(mn),空间复杂度为 O ( n ) O(n) O(n)

运行结果:
在这里插入图片描述

Solution (Java)

class Solution {
    public int minPathSum(int[][] grid) {
        int m = grid.length;
        int n = grid[0].length;
        int[] sum = new int[n];
        Arrays.fill(sum, Integer.MAX_VALUE);
        sum[0] = 0;
        for(int i = 0; i < m; i++){
            sum[0] += grid[i][0];
            for(int j = 1; j < n; j++){
                sum[j] = Math.min(sum[j-1], sum[j]) + grid[i][j];
            }
        }
        return sum[n-1];
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值