二维数组最小路径和

给出一个二维m*n矩阵grid,含有非负整数。找出一条路径从最左上角到右下角,使之经过元素之和最小。假定只能向右或向下移动。

思路:

二维数组path记录以当前位置结束的路径的最小和,比如,path[i][j]代表从grid[0][0]开始到grid[i][j]结束的最小路径和。

程序最后返回path[m-1][n-1],即从最左上角到右下角的最小路径的和

public static int minPathSum(int[][] grid){
        int m = grid.length,n=grid[0].length;
        int[][] path = new int[m][n];
        path[0][0] = grid[0][0];
        for(int i=1;i<m;i++){
            path[i][0] = path[i-1][0] + grid[i][0];   //初始化左边界
        }
        for(int j=1;j<n;j++){
            path[0][j] = path[0][j-1] + grid[0][j];   //初始化右边界
        }
        for(int i=1;i<m;i++){
            for(int j=1;j<m;j++){
                path[i][j] = Math.min(path[i][j-1]+grid[i][j], path[i-1][j]+grid[i][j]);
            }
        }
        return path[m-1][n-1];
    }

 

posted @ 2017-04-15 23:20  众里寻他壹贰度  阅读(509)  评论(0编辑  收藏  举报