题解 | #矩阵的最小路径和#

矩阵的最小路径和

http://www.nowcoder.com/practice/7d21b6be4c6b429bb92d219341c4f8bb

import java.util.*;


public class Solution {
    /**
     * 
     * @param matrix int整型二维数组 the matrix
     * @return int整型
     */
    public int minPathSum (int[][] matrix) {
        // write code here
//         if(matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0){
//             return 0;
//         }
//         int row = matrix.length;
//         int col = matrix[0].length;
//         // 创建同样大小的dp数组
//         int[][] dp = new int[row][col];
//         dp[0][0] = matrix[0][0];
//         // 第一列补全
//         for(int i = 1; i < row; i++){
//             dp[i][0] = matrix[i][0] + dp[i - 1][0];
//         }
//         // 第一行补全
//         for(int j = 1; j < col; j++){
//             dp[0][j] = matrix[0][j] + dp[0][j - 1];
//         }
//         for(int i = 1; i < row; i++){
//             for(int j = 1; j < col; j++){
//                 dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + matrix[i][j];
//             }
//         }
//         return dp[row - 1][col - 1];


        if(matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0){
            return 0;
        }
        int row = matrix.length;
        int col = matrix[0].length;
        // 观察后只需要一行空间大小的数组进行循环表示,避免多次的枚举行为。
        int[] dp = new int[col];
        dp[0] = matrix[0][0];
        for(int j = 1; j < col; j++){
            dp[j] = matrix[0][j] + dp[j - 1];
        }
        for(int i = 1; i < row; i++){
            dp[0] += matrix[i][0];
            for(int j = 1; j < col; j++){
                dp[j] = Math.min(dp[j], dp[j - 1]) + matrix[i][j];
            }
        }
        return dp[col - 1];
    }
}
全部评论

相关推荐

秋盈丶:后续:我在宿舍群里和大学同学分享了这事儿,我好兄弟气不过把他挂到某脉上了,10w+阅读量几百条评论,直接干成精品贴子,爽
点赞 评论 收藏
分享
frutiger:逆天,我家就安阳的,这hr咋能说3k的,你送外卖不比这工资高得多?还说大厂来的6k,打发叫花子的呢?这hr是怎么做到说昧良心的话的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务