Labuladong| DP-leetcode931下降路径最小和

leetcode931下降路径最小和

注意:×

  1. 其实很简单的动态规划,写错的原因是钻牛角尖发现自己想的方法完全不可行
  2. 牛角尖:沉迷前缀和数组的方式创建n+1,m+2的“大一圈”的数组然后所有的位置都使用myMin来通过dp[i][j]=matrix[i][j]+min(dp[i−1][j−1],dp[i−1][j],dp[i−1][j+1])来写
  3. 问题:要求的是上一层的最小值myMin,但是接下来的操作是matrix+myMin(1,2,3)。会出现加法和min的冲突
  4. 结论:老老实实判定边界,什么边界就怎么取值
class Solution {
    public int minFallingPathSum(int[][] matrix) {
        int n = matrix.length;
        int m = matrix[0].length;

        int ans = Integer.MAX_VALUE;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (i != 0){
                    if (j==0){
                        matrix[i][j] = matrix[i][j] + Math.min(matrix[i-1][j], matrix[i-1][j+1]);
                    } else if (j == m - 1) {
                        matrix[i][j] = matrix[i][j] + Math.min(matrix[i-1][j], matrix[i-1][j-1]);
                    }else {
                        matrix[i][j] = matrix[i][j] + myMin(matrix[i-1][j-1], matrix[i-1][j], matrix[i-1][j+1]);
                    }
                }
                if (i==n-1){
                    ans = Math.min(ans, matrix[i][j]);
                }
            }
        }
        return ans;

    }

    int myMin(int a, int b, int c){
        return Math.min(a, Math.min(b,c));
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值