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];        
        }
  • 相关阅读:
    Akka-CQRS(4)- CQRS Writer Actor 示范
    Akka-CQRS(3)- 再想多点,全面点
    变量、作用域
    JSON概述
    js浮点精度问题
    自定义级联下拉框
    nodejs+express+mysql 增删改查(二)
    使用Navicat Premium 链接本地数据库的方法(二)
    行内编辑时间框
    thinkjs升级到3.0后的图片上传
  • 原文地址:https://www.cnblogs.com/du001011/p/10486475.html
Copyright © 2011-2022 走看看