矩阵的最小路径和

刚才刷算法题遇见这样一道题

给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。

示例
image

这题解题思路很是很清晰的:
1.首先新数组第一行和第一列的数据肯定是确定的,都是这个数据加上前面的数据的和(当前数据都是当前数据加上前一个数据,就是和)
2.其余的(从第二列第二个数据开始)后面的数据都是根据左边或者上方最小的部分加来的,这些节点都是当前值加上上方或者左方节点

 public int minPathSum (int[][] matrix) {
        // write code here
        int m = matrix.length;
        int n = matrix[0].length;
        int[][] result = new int[m][n]; //创建一个一样的二维数组存放结果
        
        result[0][0] = matrix[0][0]; //第一行第一列数字
        
        //第一行的数据
        for(int i = 1;i < n;i++){
            result[0][i] = result[0][i-1] + matrix[0][i];
        }
        
        //第一列的数据
        for(int i = 1;i < m;i++){
            result[i][0] = result[i-1][0] + matrix[i][0];
        }
        
        //从第二行第二个的数据来源都是上方或者左方向,我们只需要计算他们和最小值求出
        for(int i = 1;i < m;i++){
            for(int j = 1;j < n;j++){
                result[i][j] = matrix[i][j]+Math.min(result[i][j-1],result[i-1][j]);
            }
        }
        return result[m-1][n-1];//二维数组最后一个数字就是最短距离
        }
posted @ 2021-04-15 12:24  Diamond-fz  阅读(119)  评论(0编辑  收藏  举报