关键点:
-
dp[i][j]表示从(0,0)到(i,j)的最小路径和
代码:
public static int minPathSum(int[][] m) {
if(m == null || m.length == 0 || m[0] == null || m[0].length == 0) {
return 0;
}
int row = m.length;
int col = m[0].length;
//dp[i][j]表示从(0,0)到(i,j)的最小路径和
int[][] dp = new int[row][col];
dp[0][0] = m[0][0];
for(int i = 1;i < row;i++) {
dp[i][0] = m[i][0] + dp[i - 1][0];
}
for(int j = 1;j < col;j++) {
dp[0][j] = m[0][j] + dp[0][j - 1];
}
for(int i = 1;i < row;i++) {
for(int j = 1;j < col;j++) {
dp[i][j] = m[i][j] + Math.min(dp[i - 1][j], dp[i][j - 1]);
}
}
return dp[row - 1][col - 1];
}