LeetCode 64. Minimum Path Sum Java

本文介绍了一个经典的动态规划问题,即在一个非负数构成的m*n网格中,如何找到一条从左上角到右下角的路径,使得路径上的数字之和最小。文中详细解释了动态规划的解题思路,并给出了实现代码。

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

题目:

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.

题意及分析:给出一个m*n大的网格,每个网格中的数字都为非负的术,每次能向右或者向下移动一格,求找到从最左上角的格子到最右下角的格子和最小的路径。本题我采用动态规划的解法,对于其中一点grid[i][j](i<i<m.i<j<n),因为只有两种方法到达该点,所以到这点的最短路径只能是上一点或者左边的点的最短路劲加上当前点的值,即d(grid[i][j])=min{d(grid[i][j-1]),d(grid[i-1][j])} + grid[i][j]。对于第一行或者第一列来说都只有一种情况到达该点,所以需要直接由前一个点的最短路径加上当前点值即可。遍历整个网格,便可以得到最终值。

代码:

public class Solution {

	public int minPathSum(int[][] grid) {
        int m=grid.length;		//行
        int n=-1;	//列
        if(m!=0)
        	n=grid[0].length;
        int[][] A=new int[m][n];
        for(int i=0;i<m;i++){
        	for(int j=0;j<n;j++){
        		if(i==0||j==0){
        			if(i==0&&j!=0){
        				A[i][j]=A[i][j-1]+grid[i][j];		//第一行的值等于前一个值加上当前值
        			}else if(i!=0&&j==0){
        				A[i][j]=A[i-1][j]+grid[i][j];	//第一列的值等于加上当前格子的值
        			}else {
        				A[i][j]=grid[i][j];	//起始点,就为起始点本身的值
					}
        		}else{
        			A[i][j]=Math.min(A[i][j-1]+grid[i][j],A[i-1][j]+grid[i][j]);	
        		}
        	}
        }
        return A[m-1][n-1];
    }
}

  

  

 

转载于:https://www.cnblogs.com/271934Liao/p/6916495.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值