leetcode 931. Minimum Falling Path Sum
O(N) space and O(M * N) time solution, where M, N is A's row number and column number
class Solution {
public int minFallingPathSum(int[][] A) {
int M = A.length, N = A[0].length;
int[] d = new int[N];
for (int i = 0; i < N; ++i) d[i] = A[0][i];
for (int i = 1; i < M; ++i) {
int prev = 0;
for (int j = 0; j < N; ++j) {
int current = d[j];
if (j != 0) d[j] = Math.min(d[j], prev);
if (j != N - 1) d[j] = Math.min(d[j], d[j + 1]);
d[j] += A[i][j];
prev = current;
}
}
int ret = Integer.MAX_VALUE;
for (int i = 0; i < N; ++i) ret = Math.min(d[i], ret);
return ret;
}
}