zoukankan      html  css  js  c++  java
  • LeetCode 64. Minimum Path Sum Java

    题目:

    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];
        }
    }
    

      

      

  • 相关阅读:
    让你平步青云的10个谈话技巧
    瑞士心理学家和精神分析医师――荣格
    市场倍增理论
    淘宝网格,淘宝富人群
    波波的个人简历
    磁盘修复工具
    9种没结果的爱(未婚者必读)!!!
    网络投机市场
    网页数据抽取的方法介绍
    C#扩展方法试用
  • 原文地址:https://www.cnblogs.com/271934Liao/p/6916495.html
Copyright © 2011-2022 走看看