Given an n x n array of integers matrix, return the minimum sum of any falling path throughmatrix.
A falling path starts at any element in the first row and chooses the element in the next row that is either directly below or diagonally left/right. Specifically, the next element from position (row, col) will be (row + 1, col - 1), (row + 1, col), or (row + 1, col + 1).
Example 1:
Input: matrix = [[2,1,3],[6,5,4],[7,8,9]]
Output: 13
Explanation: There are two falling paths with a minimum sum as shown.
Example 2:
Input: matrix = [[-19,57],[-40,-5]]
Output: -59
Explanation: The falling path with a minimum sum is shown.
Constraints:
n == matrix.length == matrix[i].length
1 <= n <= 100
-100 <= matrix[i][j] <= 100
Solutions
Solution 1: Dynamic Programming (Rolling Array)
Thinking
A falling path may step only to the three adjacent cells in the next row, and \(n\le 100\). Enumerating paths is impossible. The best way to \((i,j)\) depends only on the previous row at \(j-1,j,j+1\). Compute this row by row and roll a one-dimensional array, using \(O(n)\) extra space.
Let \(f[i][j]\) be the minimum falling path sum that ends at row \(i\), column \(j\):