动态规划中等1 种解法
#64最小路径和
从网格左上角只向右或向下移动,求到右下角的最小路径数字和。
#数组#动态规划#矩阵
解题主线
01
到达当前格的最小代价只可能来自上方或左方;第一行和第一列各只有一种路径。
解法 1:二维动态规划
初始化两条边界,再按行递推 dp[row][column]。
时间复杂度
O(mn)
空间复杂度
O(mn)
java
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