967. Minimum Falling Path Sum
2026/1/12大约 1 分钟约 387 字
967. Minimum Falling Path Sum
难度: Medium
题目描述
Given an n x n array of integers matrix, return the minimum sum of any falling path through matrix.
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].length1 <= n <= 100-100 <= matrix[i][j] <= 100
解题思路
代码实现
解决方案
java
class Solution {
public int minFallingPathSum(int[][] matrix) {
if (matrix.length == 1) {
return matrix[0][0];
}
int n = matrix.length;
int[][] dp = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == 0) {
dp[i][j] = matrix[i][j];
continue;
}
if (j == 0 && j < n - 1) {
dp[i][j] = Math.min(dp[i - 1][j], dp[i - 1][j + 1]) + matrix[i][j];
continue;
}
if (j == n - 1 && j > 0) {
dp[i][j] = Math.min(dp[i - 1][j], dp[i - 1][j - 1]) + matrix[i][j];
continue;
}
dp[i][j] = Math.min(Math.min(dp[i - 1][j], dp[i - 1][j - 1]), dp[i - 1][j + 1]) + matrix[i][j];
}
}
Arrays.sort(dp[n - 1]);
return dp[n - 1][0];
}
}