zoukankan      html  css  js  c++  java
  • 编程题:最小矩阵路径

    矩阵的最小路径和

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

    考察点:数组、动态规划

    思路:

    到达一个点(i,j)我们可以选择从(i-1,j)下来,或者从(i,j-1)往右过来,那么到达(i,j)的最小路径和则是两者中小的那个。

    解题:

    构建最小路径和矩阵minL,返回矩阵右下角的值。

    当i=0&&j=0:minL[i][j] = matrix[i][j]

    当i=0:         minL[i][j] = minL[i][j-1]+matrix[i][j]

    当j=0:         minL[i][j] = minL[i-1][j]+matrix[i][j]

    当j>0&&j>0: minL[i][j] = minL[i-1][j]+matrix[i][j]和minL[i][j-1]+matrix[i][j]中的最小值

    /**
         *左上角到右下角的最小矩阵和,只能向右向下
         * @param matrix int整型二维数组 the matrix
         * @return int整型
         */
        public int minPathSum (int[][] matrix) {
            // 到达每个点的最小路径和=min(左边点的最小路径和,右边的最小路径和)+自己本身的权
            //递归超时……使用数组存储以及循环
            if(matrix.length==0) return 0;
            if(matrix[0].length==0) return 0;
            //return  minPathSumofPoint(matrix,matrix.length-1,matrix[0].length-1);
            int[][] minl = new int[matrix.length][matrix[0].length];
            for(int i=0;i<matrix.length;i++){
                for(int j=0;j<matrix[i].length;j++){
                    if(i==0&&j==0){
                        minl[i][j] = matrix[i][j];
                    }
                    else if(i==0){
                        minl[i][j] = minl[i][j-1]+matrix[i][j];
                    }
                    else if(j==0){
                        minl[i][j] = minl[i-1][j]+matrix[i][j];
                    }
                    else{
                        if(minl[i-1][j]<minl[i][j-1]){
                            minl[i][j] = minl[i-1][j]+matrix[i][j];
                        }
                        else{
                            minl[i][j] = minl[i][j-1]+matrix[i][j];
                        }
    
                    }
                }
    
            }
            return minl[matrix.length-1][matrix[0].length-1];
    
        }
    
     public  int minPathSumofPoint(int[][] matrix,int i,int j){
            if(i<0||j<0){
                return -1;
            }
            if(i==0&&j==0){
                return matrix[0][0];
            }
            else if(i==0){
                //System.out.println(matrix[i][j]);
                return minPathSumofPoint(matrix,i,j-1)+matrix[i][j];
            }
            else if(j==0){
                //System.out.println(matrix[i][j]);
                return minPathSumofPoint(matrix,i-1,j)+matrix[i][j];
            }
            else{
                //System.out.println(matrix[i][j]);
                return Math.min(minPathSumofPoint(matrix,i,j-1)+matrix[i][j],minPathSumofPoint(matrix,i-1,j)+matrix[i][j]);
            }
        }
    当你深入了解,你就会发现世界如此广袤,而你对世界的了解则是如此浅薄,请永远保持谦卑的态度。
  • 相关阅读:
    SAP OPEN UI5 Step 8: Translatable Texts
    SAP OPEN UI5 Step7 JSON Model
    SAP OPEN UI5 Step6 Modules
    SAP OPEN UI5 Step5 Controllers
    SAP OPEN UI5 Step4 Xml View
    SAP OPEN UI5 Step3 Controls
    SAP OPEN UI5 Step2 Bootstrap
    SAP OPEN UI5 Step1 环境安装和hello world
    2021php最新composer的使用攻略
    Php使用gzdeflate和ZLIB_ENCODING_DEFLATE结果gzinflate报data error
  • 原文地址:https://www.cnblogs.com/liwxmyself/p/14699048.html
Copyright © 2011-2022 走看看