【每日一题Day264】LC931下降路径最小和 | dp

简介: 【每日一题Day264】LC931下降路径最小和 | dp

下降路径最小和【LC931】

给你一个 n x n方形 整数数组 matrix ,请你找出并返回通过 matrix下降路径最小和

下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。具体来说,位置 (row, col) 的下一个元素应当是 (row + 1, col - 1)(row + 1, col) 或者 (row + 1, col + 1)

image.png

  • 为了方便边界处理,将dp数组左边增加一列,右边增加一列
class Solution {
    public int minFallingPathSum(int[][] matrix) {
        int n = matrix[0].length;
        if (n == 1) return matrix[0][0];
        int[] dp = new int[n + 2];
        System.arraycopy(matrix[0], 0, dp, 1, n);
        dp[0] = dp[n + 1] = Integer.MAX_VALUE;
        int res = Integer.MAX_VALUE;      
        for (int i = 1; i < n; i++){
            int pre = dp[0];
            for (int j = 0; j < n; j++){
                int tmp = pre;
                pre = dp[j + 1];
                dp[j + 1] = Math.min(tmp, Math.min(dp[j + 1], dp[j + 2])) + matrix[i][j];
            }            
        }
        for (int j = 1; j <= n; j++){
            res = Math.min(res, dp[j]);
        }
        return res;
    }
}

image.png

目录
相关文章
|
7月前
【每日一题Day168】LC2427公因子的数目 | 模拟
【每日一题Day168】LC2427公因子的数目 | 模拟
46 1
|
7月前
【每日一题Day357】LC1155掷骰子等于目标和的方法数 | dp
【每日一题Day357】LC1155掷骰子等于目标和的方法数 | dp
63 0
|
7月前
【每日一题Day243】LC1595连通两组点的最小成本 | 状态压缩dp
【每日一题Day243】LC1595连通两组点的最小成本 | 状态压缩dp
61 0
|
7月前
|
索引
【每日一题Day183】LC1187使数组严格递增 | dp
【每日一题Day183】LC1187使数组严格递增 | dp
43 0
|
算法
【学会动态规划】下降路径最小和(8)
【学会动态规划】下降路径最小和(8)
48 0
|
7月前
|
机器学习/深度学习
动态规划|【路径问题】|931.下降路径最小和
动态规划|【路径问题】|931.下降路径最小和
|
7月前
【每日一题Day167】LC1000合并石头的最低成本 | 区间dp
【每日一题Day167】LC1000合并石头的最低成本 | 区间dp
60 1
【每日一题Day167】LC1000合并石头的最低成本 | 区间dp
|
7月前
LeetCode题:931下降路径最小和
LeetCode题:931下降路径最小和
51 0
|
7月前
【每日一题Day291】LC1289下降路径最小和 II | dp
【每日一题Day291】LC1289下降路径最小和 II | dp
40 0
|
7月前
【每日一题Day262】LC1911最大子序列交替和 | dp
【每日一题Day262】LC1911最大子序列交替和 | dp
40 0