import java.util.*; /** * NC59 矩阵的最小路径和 * @author d3y1 */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix int整型二维数组 the matrix * @return int整型 */ public int minPathSum (int[][] matrix) { return solution(matrix); } /** * 动态规划 * * dp[i][j]表示矩阵matrix从起始点(0,0)到达当前点(i,j)的最小路径和 * * { matrix[i][j] , i==0 && j==0 * dp[i][j] = { dp[i][j-1] + matrix[i][j] , i==0 && j!=0 * { dp[i-1][j] + matrix[i][j] , i!=0 && j==0 * { Math.min(dp[i][j-1], dp[i-1][j]) + matrix[i][j] , i!=0 && j!=0 * * @param matrix * @return */ private int solution(int[][] matrix){ int row = matrix.length; int col = matrix[0].length; int[][] dp = new int[row][col]; for(int i=0; i<row; i++){ for(int j=0; j<col; j++){ if(i==0 && j==0){ dp[i][j] = matrix[i][j]; }else if(i==0 && j!=0){ dp[i][j] = dp[i][j-1] + matrix[i][j]; }else if(i!=0 && j==0){ dp[i][j] = dp[i-1][j] + matrix[i][j]; }else{ dp[i][j] = Math.min(dp[i][j-1], dp[i-1][j]) + matrix[i][j]; } } } return dp[row-1][col-1]; } }