动态规划中等1 种解法

#64最小路径和

从网格左上角只向右或向下移动,求到右下角的最小路径数字和。

#数组#动态规划#矩阵

解题主线

01

到达当前格的最小代价只可能来自上方或左方;第一行和第一列各只有一种路径。

解法 1二维动态规划

初始化两条边界,再按行递推 dp[row][column]。

时间复杂度

O(mn)

空间复杂度

O(mn)

64. 最小路径和 · 二维动态规划
final class Solution {
    public int minPathSum(int[][] grid) {
        int rows = grid.length;
        int columns = grid[0].length;
        int[][] dp = new int[rows][columns];
        dp[0][0] = grid[0][0];
        for (int row = 1; row < rows; row++) {
            dp[row][0] = dp[row - 1][0] + grid[row][0];
        }
        for (int column = 1; column < columns; column++) {
            dp[0][column] = dp[0][column - 1] + grid[0][column];
        }
        for (int row = 1; row < rows; row++) {
            for (int column = 1; column < columns; column++) {
                dp[row][column] = Math.min(dp[row - 1][column], dp[row][column - 1])
                        + grid[row][column];
            }
        }
        return dp[rows - 1][columns - 1];
    }
}

初始化两条边界,再按行递推 dp[row][column]。

边界与易错点

  • 第一行、第一列必须单独初始化。
  • 若允许修改输入,可直接把 grid 作为 dp 表以降至 O(1) 额外空间。
整理来源

由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。

medium/Q064_minPathSum.java