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

矩阵的最小路径和

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];
    }
}
全部评论

相关推荐

2024-12-05 18:57
已编辑
吉林大学 Java
张伟要好好学习:这么巧的,我叫安赛龙,祝贺兄弟
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务