j解法:记忆化+递归;
class Solution {
int[][] memo;
public int minFallingPathSum(int[][] matrix) {
memo = new int[matrix.length][matrix.length];
int res = Integer.MAX_VALUE;
for(int i = 0;i < matrix.length;i++) Arrays.fill(memo[i],Integer.MAX_VALUE);
for(int i = 0;i<matrix.length;i++){
res = Math.min(dfs931(matrix,0,i),res);
}
return res;
}
public int dfs931(int[][] matrix,int i,int j){
if(i > matrix.length - 1 || j > matrix.length - 1){
return Integer.MAX_VALUE;
}
if(j < 0)
return Integer.MAX_VALUE;
if(i == matrix.length - 1){
return matrix[i][j];
}
if(memo[i][j] != Integer.MAX_VALUE) return memo[i][j];
int res = 0;
// for(int z =j + 1;z+1<matrix.length;z++){
res = Math.min(Math.min(dfs931(matrix,i+1,j - 1),dfs931(matrix,i+1,j + 1)),
dfs931(matrix,i + 1,j)) + matrix[i][j];
// }
return memo[i][j] = res;
}
}