zoukankan      html  css  js  c++  java
  • 矩阵的最小路径和

    给你一个数组,求从[0,0]位置到[n-1,m-1]的最短路径。

    数组如图所示:

    1 3 5 9
    8 2 3 4
    5 0 6 1
    8 8 4 0

    路径1→3→1→0→6→1→0是所有路径中路径和最小的,所以返回12

    代码:

    public class MinpathSum{
    
        //时间复杂度O(M*N),空间复杂度O(M*N)
        public static int minPathSum1(int[][] matrix) {
            if(matrix == null || matrix.length==0 || matrix[0].length==0) {
                return 0;
            }
            
            int row = matrix.length;
            int col = matrix[0].length;
            
            int[][] dp = new int[row][col];
            //初始化数组
            dp[0][0] = matrix[0][0];
            
            for(int i=1; i<row; i++) {
                dp[i][0]=dp[i-1][0]+matrix[i][0];
            }
            for(int i=1; i<col; i++) {
                dp[0][i]=dp[0][i-1]+matrix[0][i];
            }
            
            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];
        }
        
        //时间复杂度O(M*N),空间复杂度O(min(M*N))
        public static int minPathSum2(int[][] matrix) {
            if(matrix == null || matrix.length==0 || matrix[0].length==0) {
                return 0;
            }
            
            int row = matrix.length;
            int col = matrix[0].length;
            //压缩dp数组为一维数组,运用翻滚的的方法逐行往下翻滚
            int[] dp = new int[col];
            //初始化数组
            dp[0] = matrix[0][0];
            
            for(int i=1; i<col; i++) {
                dp[i]=dp[i-1]+matrix[0][i];
            }
            
            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];
        }
        
        
        public static void main(String[] args) {
            int[][] matrix = {{1,3,5,9},{8,1,3,4},{5,0,6,1},{8,8,4,0}};
            System.out.println(minPathSum1(matrix));
            System.out.println(minPathSum2(matrix));
        }
    }
  • 相关阅读:
    【Linux】【Chrome】安装Chrome浏览器的攻略
    ubuntu下安装程序的三种方法
    scala学习笔记
    安装scala
    安装java
    Python学习笔记
    Linux安装python
    软件测试笔记
    Linux安装微信
    PUTTY学习
  • 原文地址:https://www.cnblogs.com/loren-Yang/p/7481759.html
Copyright © 2011-2022 走看看