最小路径和

1 题目描述
给出一个包含非负整数的m×n矩阵,从左上角出发至右下角,每次只能向右或者向下移动一步,找出数字之和最小的路径。
输入:matrix = [[1,2,7],[2,5,3],[1,1,1]],如图2-3所示。
1  2  7
2  5  3
1  1  1
输出:6。
解释:路径1→2→1→1→1的总和最小。
2 题目解析
(1)定义问题状态:定义一个m×n二维数组dp[][],dp[i][j]代表从左上角出发到(i,j)位置的最小路径和。
(2)定义初始条件:dp[0][0] = matrix [0][0]。
(3)确定转移方程:根据题意,每次只能向右或者向下移动一步,可确定状态转移方程:
● 当j = 0时,dp[i][0] = dp[i-1][0] + matrix[i][0]。
● 当i = 0时,dp[0][j] = dp[0][j-1] + matrix[0][j]。
● 当i > 0 且 j > 0时,dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + matrix[i][j]。
最终,dp[m-1][n-1]就是待求结果。
3、代码实现
public class MinPathSum {
    public static void main(String[] args) {
        int[][] matrix = {{1, 2, 7}, {2, 5, 3}, {1, 1, 1}};
        System.out.println(minPathSum(matrix));
    }

    public static int minPathSum(int[][] matrix) {
        int row = matrix.length; // 行数
        int col = matrix[0].length; // 列数
        int[][] dp = new int[row][col];
        dp[0][0] = matrix[0][0];
        // 先初始化dp第一行
        for (int i = 1; i < row; i++) {
            dp[i][0] = matrix[i][0] + dp[i - 1][0];
        }
        // 初始化dp第一列
        for (int j = 1; j < col; j++) {
            dp[0][j] = matrix[0][j] + dp[0][j - 1];
        }
        // 计算dp[i][j],i和j从1开始
        for (int i = 1; i < row; i++) {
            for (int j = 1; j < col; j++) {
                dp[i][j] = matrix[i][j] + Math.min(dp[i - 1][j], dp[i][j -1]);
            }
        }
        return dp[row - 1][col - 1];
    }
}

相关推荐

  1. 路径

    2024-04-26 11:38:04       14 阅读
  2. 【DP】64.路径

    2024-04-26 11:38:04       38 阅读
  3. 120. 三角形路径

    2024-04-26 11:38:04       32 阅读
  4. Leetcode64. 路径

    2024-04-26 11:38:04       17 阅读
  5. leetcode 64.路径

    2024-04-26 11:38:04       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-26 11:38:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-26 11:38:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-26 11:38:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-26 11:38:04       18 阅读

热门阅读

  1. Ajax 笔记 01

    2024-04-26 11:38:04       10 阅读
  2. 华纳云:如何使用Docker进行有效的日志管理?

    2024-04-26 11:38:04       13 阅读
  3. 【MySQL】排序和分页

    2024-04-26 11:38:04       14 阅读
  4. STM32中UART通信的完整C语言代码范例

    2024-04-26 11:38:04       12 阅读
  5. Python项目开发实战:怎么实现端口扫描器

    2024-04-26 11:38:04       12 阅读
  6. Hive概述

    2024-04-26 11:38:04       12 阅读
  7. C++笔记打卡第23天(STL常用算法)

    2024-04-26 11:38:04       11 阅读
  8. 如何写得一手优雅规范的SpringBoot 接口?

    2024-04-26 11:38:04       14 阅读
  9. opencv 存储像素值为浮点数的图像 (.tiff)

    2024-04-26 11:38:04       10 阅读
  10. 【ARMv9 DSU-120 系列 10 -- PMU 详细介绍】

    2024-04-26 11:38:04       14 阅读
  11. 工厂模式(Factory Pattern)

    2024-04-26 11:38:04       12 阅读
  12. 矿山自动驾驶技术点分析

    2024-04-26 11:38:04       12 阅读