931. 下降路径最小和
1.采用动态规划 dp[i][j]
2.N为数组大小,从倒数第二行开始,for (int r = N - 2; r >= 0; --r)
3.在2步内嵌一层循环,拿当前下一行中 对应左中右 的最小值 best = dp[i + 1][j]
4.在3步中,当前行中都加上 best,即:dp[i][j] += best
5.双层循环结束后,取数组A[0]中的最小值
代码:
class Solution {
public int minFallingPathSum(int[][] A) {
int N = A.length;
for (int r = N-2; r >= 0; --r) {
for (int c = 0; c < N; ++c) {
// best = min(A[r+1][c-1], A[r+1][c], A[r+1][c+1])
int best = A[r+1][c];
if (c > 0)
best = Math.min(best, A[r+1][c-1]);
if (c+1 < N)
best = Math.min(best, A[r+1][c+1]);
A[r][c] += best;
}
}
int ans = Integer.MAX_VALUE;
for (int x: A[0])
ans = Math.min(ans, x);
return ans;
}
}