Leetcode029--最小路径和

一、原题



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 x n的方格,每个元素的值都是非负的,找出从左上角顶点,到右下角顶点和的值最小的路径,返回找到的最小和 



三、举例



给定一个3*3的矩阵,最后得到的是这个3*3矩阵的最短路径



四、思路



也是通过动态规划的方式

第一个: res[0][0] = num[0][0] 
第一行: res[0][j] = res[0][j - 1] + num[0][j] 
第一列: res[i][0] = res[i - 1][0] + num[i][0] 
其它情况:res[i][j] = min(res[i - 1][j], res[i][j - 1]) + num[i][j] 


五、程序

package code;

public class LeetCode40{
	
	public static void main(String args[]){
		int num[][] = new int[][]{
			{1, 1, 2, 0},
			{1, 2, 3, 4},
			{4, 1, 1, 0}
		};
		
		System.out.println(minPathsNum(num));
	}


	//最短路径的问题
	public static int minPathsNum(int[][] num) {
        // 输入校验
        if (num == null || num.length < 1 || num[0].length < 1){
            return 0;
        }

        int rows = num.length;
        int cols = num[0].length;
        int[][] result = new int[rows][cols];

        // 第一个数
        result[0][0] = num[0][0];
        
        //第一行
        for(int i = 1; i < cols; i++){
        	result[0][i] = result[0][i - 1] + num[0][i];
        }
        
        //第一列
        for(int i = 1; i < rows; i++){
        	result[i][0] = result[i - 1][0] + num[i][0];
        }
        
        //其他的情况
        for(int i = 1; i < rows; i++){
        	for( int j = 1; j < cols; j++){
        		result[i][j] = Math.min(result[i-1][j], result[i][j-1]) + num[i][j];
        	}
        }

        return result[rows - 1][cols - 1];
    }

}
	

-----------------------------------output-------------------------------------

6


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值