931. Minimum Falling Path Sum

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
private static final int[][] DIRECTIONS = new int[][]{{-1, -1}, {-1, 0}, {-1, 1}};

public int minFallingPathSum(int[][] matrix) {
int n = matrix.length;

for (int i = 1; i < n; i++) {
for (int j = 0; j < n; j++) {
int min = Integer.MAX_VALUE;
for (int[] direction : DIRECTIONS) {
int prevI = i + direction[0], prevJ = j + direction[1];
if (prevI >= 0 && prevI < n && prevJ >= 0 && prevJ < n) {
min = Math.min(min, matrix[prevI][prevJ]);
}
}
matrix[i][j] += min;
}
}

int minPathSum = Integer.MAX_VALUE;
for (int j = 0; j < n; j++) {
minPathSum = Math.min(minPathSum, matrix[n - 1][j]);
}
return minPathSum;
}
}

References

931. Minimum Falling Path Sum