2023-07-13 Leetcode 931 下降路径最小和

184 阅读1分钟

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