LeetCode 64 .Minimum Path Sum

本文介绍了解决LeetCode 64题——最小路径和的方法。该题要求在一个给定的矩阵中找到从左上角到右下角路径上的最小数值和,只能向右或向下移动。通过动态规划算法,文章详细解释了如何计算每个点的最小路径和,并最终得到整个路径的最小值。

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

LeetCode 64 .Minimum Path Sum

题目链接:https://leetcode.com/problems/minimum-path-sum/description/

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 1:

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

Given the above grid map, return

7

. Because the path 1→3→1→1→1 minimizes the sum.

这是一道非常典型的动态规划题,动态规划需要利用到上一次的结果,是一种特殊的迭代思想,关键是要找出状态方程(递推递推关系式),设在(i,j)点的最小和为s[i,j],则s[i,j]=Min(s[i-1,j],s[i,j-1])+grid[i][j];再考虑一些边界情况,即s[i-1,j]或者s[i,j-1]不存在,即二维数组只有一行或一列时,最小和为数组所有元素之和,需要考虑这两种边界情况。

class Solution {
     public int minPathSum(int[][] grid) {
           int m=grid.length;
           int n=grid[0].length;
           int [][]sum=new int[m][n];
           sum[0][0]=grid[0][0];  //二维数组sum存储在不同位置的最小和。
           for(int i=1;i<m;i++){                 //左边界
               sum[i][0]=sum[i-1][0]+grid[i][0];
           }
           for(int j=1;j<n;j++){      //上边界
               sum[0][j]=sum[0][j-1]+grid[0][j];
           }
           for(int i=1;i<m;i++){
               for(int j=1;j<n;j++){
                   sum[i][j]=Math.min(sum[i-1][j], sum[i][j-1])+grid[i][j];
               }
           }
           return  sum[m-1][n-1];
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值