继续和东哥一起学习算法,记录一下我的学习过程931下落路径的最小和(中)publicintminFallingPathSum(int[][]矩阵){intn=matrix.length;intres=Integer.MAX_VALUE;for(intj=0;j=matrix.length||j>=matrix[0].length){return999999;}//basecaseif(i==0){returnmatrix[i][j];}//状态转移方程returnmatrix[i][j]+min(dp(matrix,i-1,j),dp(matrix,i-1,j-1),dp(matrix,i-1,j+1));}intmin(inta,intb,intc){returnMath.min(a,Math.min(b,c));}这里需要要清楚最重要的是dp函数和DPTable不是一回事*,虽然我们已经成功构造了dp函数,但这并不意味着我们可以省去【重叠子问题】的计算。因此这里使用memo方法来消除重叠子问题publicintminFallingPathSum(int[][]matrix){intn=matrix.length;memo=newint[n][n];for(inti=0;i=matrix.length||j>=matrix[0].length){return99999;}}//2.basecaseif(i==0){返回矩阵[0][j];}//3.找到memoif(memo[i][j]!=66666){returnmemo[i][j];}//4.执行状态转移memo[i][j]=matrix[i][j]+min(dp(矩阵,i-1,j),dp(矩阵,i-1,j-1),dp(矩阵,i-1,j+1));返回备忘录[i][j];}intmin(inta,intb,intc){返回Math.min(a,Math.min(b,c));}对于非法索引,返回值如何确定,这个需要根据状态转移方程的逻辑来确定