zoukankan      html  css  js  c++  java
  • 最短路径(给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。)

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。

    例:
    输入:
    [
    [1,3,1],
    [1,5,1],
    [4,2,1]
    ]
    输出: 7
    解释: 因为路径 1→3→1→1→1 的总和最小。

    问题分析:首先判断传入数组arr是否为空,为空直接返回0,新建数组array,用来表示每一步走后的数字之和,接下来步骤见代码注释

    public static int minPathSum(int[][] arr) {
            if(arr.length == 0) return 0;
            int m = arr.length;
            int n = arr[0].length;
            int[][] array = new int[m][n];
            for(int i = 0;i<m;i++) {
                for(int j = 0;j<n;j++) {
                    //起始位置为传入数组arr起始位置值
                    if(i == 0 && j == 0) {
                        array[i][j] = arr[i][j];
                    }else if (i == 0) {
                        //第0行,每一列的值为前一列值(array数组)加上当前列的值(arr数组)
                        array[i][j] = array[i][j - 1] + arr[i][j];
                    }else if (j == 0) {
                        //第0列,每一行的值为前一行值(array数组)加上当前行的值(arr数组)
                        array[i][j] = array[i - 1][j] + arr[i][j];
                    }else {
                        //该位置的值为 该位置(array[i][j])的左边和上边值的最小值 加上当前位置的值(arr数组)
                        array[i][j] = Math.min(array[i-1][j], array[i][j-1]) + arr[i][j];
                    }
                }
            }
            return array[m-1][n-1];        
        }
  • 相关阅读:
    C++同步串口通信
    python描述符详解
    python属性访问
    python简单计时器实现
    python时间模块详解(time模块)
    python魔法方法大全
    python类与对象各个算数运算魔法方法总结
    python里的魔法方法1(构造与析构)
    Python 函数修饰符(装饰器)的使用
    python类与对象的内置函数大全(BIF)
  • 原文地址:https://www.cnblogs.com/du001011/p/10486475.html
Copyright © 2011-2022 走看看