3
/* public int minFallingPathSum(int[][] grid) {5
if(n==1) return grid[0][0];7
for(int i=0 ; i<n ; i++){8
ans = Math.min(ans , grid[0][i] + helper(grid , n , 1 , i));13
private int helper(int[][] grid , int n , int i , int last){16
for(int k=0 ; k<n ; k++){18
min = Math.min( grid[n-1][k] , min);25
for(int k=0 ; k<n ; k++){27
min = Math.min( min ,grid[i][k] + helper(grid , n , i+1 , k) );36
public int minFallingPathSum(int[][] grid) {38
if (n == 1) return grid[0][0];39
int[][] dp = new int[n][n];40
for (int i = 0; i < n; i++) {41
for (int j = 0; j < n; j++) {47
for (int i = 0; i < n; i++) {48
ans = Math.min(ans, grid[0][i] + helper(grid, n, 1, i, dp));53
private int helper(int[][] grid, int n, int i, int last, int[][] dp) {56
for (int k = 0; k < n; k++) {58
min = Math.min(grid[n - 1][k], min);63
if (dp[i][last] != -1) return dp[i][last];65
for (int k = 0; k < n; k++) {67
min = Math.min(min, grid[i][k] + helper(grid, n, i + 1, k, dp));