牛客地址
解题思路
利用动态规划,从后往前推
代码如下
import java.util.*;
public class Solution {
/**
*
* @param matrix int整型二维数组 the matrix
* @return int整型
*/
public int minPathSum (int[][] matrix) {
// write code here
if(matrix == null || matrix.length == 0){
return 0;
}
int m = matrix.length;
int n = matrix[0].length;
int[][] dp = new int[m][n];
for(int i = m - 1; i >= 0; i --){
for(int j = n - 1; j >= 0; j--){
//如果是最后一行,只能往右边过来
if(i == m - 1 && j != n - 1){
dp[i][j] = dp[i][j+1] + matrix[i][j];
}
//如果是最后一列,只能往下边过来
else if(j == n - 1 && i != m - 1){
dp[i][j] = dp[i+1][j] + matrix[i][j];
}
else if(i != m - 1 && j != n - 1){
dp[i][j] = Math.min(dp[i+1][j], dp[i][j+1]) + matrix[i][j];
}
//这里对应的情况为dp[m-1][n-1] = matrix[m-1][n-1]
else{
dp[i][j] = matrix[i][j];
}
}
}
return dp[0][0];
}
}