2
public int min(int[][] matrix, int[][] dp, int i, int j) {4
if (i == 0) return matrix[i][j];5
if (dp[i][j] != Integer.MAX_VALUE) return dp[i][j];7
dp[i][j] = Math.min(min(matrix, dp, i - 1, j), min(matrix, dp, i - 1, j + 1)) + matrix[i][j];8
} else if (j == matrix.length - 1) {9
dp[i][j] = Math.min(min(matrix, dp, i - 1, j), min(matrix, dp, i - 1, j - 1)) + matrix[i][j];13
Math.min(min(matrix, dp, i - 1, j), min(matrix, dp, i - 1, j + 1)),14
min(matrix, dp, i - 1, j - 1))20
public int minFallingPathSum(int[][] matrix) {21
int dp[][] = new int[matrix.length][matrix.length];22
if (matrix.length == 1) return matrix[0][0];23
for (int i = 0; i < matrix.length; i++)24
for (int j = 0; j < matrix.length; j++) dp[i][j] = Integer.MAX_VALUE;25
int min = Integer.MAX_VALUE;26
for (int i = 0; i < matrix.length; i++) {27
min = Math.min(min, min(matrix, dp, matrix.length - 1, i));