思路:构建dp,每一个位置记录走过的路径和,最后返回右下角即可。
可以将matrix.length 和 matrix[0].length 提出来 赋入新变量中,这样可读性会更高。
public int minPathSum (int[][] matrix) { // write code here //构建dp数组,这里存的是路线累计的值,而不是个别位置的数字 int [][]dp=new int[matrix.length][matrix[0].length]; dp[0][0]=matrix[0][0]; //赋开头 //构建第一行、第一列的dp for(int i=1;i<matrix[0].length;i++) dp[0][i]=dp[0][i-1]+matrix[0][i]; //第一行 for(int j=1;j<matrix.length;j++) dp[j][0]=dp[j-1][0]+matrix[j][0]; //第一列 //开始dp构建,从下标(1,1)开始,一行一行遍历,想要到达下一个对角线,就要进行判断哪个最小 for(int i=1;i<matrix.length;i++) for(int j=1;j<matrix[0].length;j++) dp[i][j]=Math.min(dp[i][j-1],dp[i-1][j])+matrix[i][j]; return dp[matrix.length-1][matrix[0].length-1]; }