Problem: 931. 下降路径最小和
思路
经典DP,直接记录每层的最优解即可
解题方法
可以尝试在空间上简单优化以下,但是注意不能覆盖后面还需要使用的值
Code
class Solution {
public int minFallingPathSum(int[][] matrix) {
int n = matrix.length;
if (n == 1) {
return matrix[0][0];
}
int[][] dp = new int[n][n+2];
int res = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) Arrays.fill(dp[i], 10100);
for (int i = 1; i <= n; i++) {
dp[0][i] = matrix[0][i-1];
}
for (int i = 1; i < n; i++) {
for (int j = 1; j <= n; j++) {
dp[i][j] = Math.min(Math.min(dp[i-1][j-1], dp[i-1][j+1]), dp[i-1][j]) + matrix[i][j-1];
if (i == n-1) res = Math.min(res, dp[i][j]);
}
}
return res;
}
}