Q:给定一个由非负整数填充的m x n的二维数组,现在要从二维数组的左上角走到右下角,请找出路径上的所有数字之和最小的路径。
注意:你每次只能向下或向右移动。
A:还是典型动态规划问题。
public static int minPathSum(int[][] grid) {
int size1 = grid.length;//行数
int size2 = grid[0].length;//列数
int[][] dp = new int[size1][size2];
dp[0][0] = grid[0][0];
for (int i = 1; i < size2; i++) {
dp[0][i] = dp[0][i - 1] + grid[0][i];
}
for (int j = 1; j < size1; j++) {
dp[j][0] = dp[j - 1][0] + grid[j][0];
}
int min = 0;
for (int i = 1; i < size1; i++) {
for (int j = 1; j < size2; j++) {
min = Math.min(dp[i - 1][j], dp[i][j - 1]);
dp[i][j] = min + grid[i][j];
}
}
return dp[size1 - 1][size2 - 1];
}