LeetCode:931. 下降路径最小和

199 阅读1分钟

931. 下降路径最小和

leetcode-cn.com/problems/mi…

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;
    }
}