前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 931. 下降路径最小和(动态规划)

LeetCode 931. 下降路径最小和(动态规划)

作者头像
Michael阿明
发布2020-07-13 11:52:03
3610
发布2020-07-13 11:52:03
举报

1. 题目

给定一个方形整数数组 A,我们想要得到通过 A 的下降路径的最小和

下降路径可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列

代码语言:javascript
复制
示例:
输入:[[1,2,3],[4,5,6],[7,8,9]]
输出:12
解释:
可能的下降路径有:
[1,4,7], [1,4,8], [1,5,7], [1,5,8], [1,5,9]
[2,4,7], [2,4,8], [2,5,7], [2,5,8], [2,5,9], [2,6,8], [2,6,9]
[3,5,7], [3,5,8], [3,5,9], [3,6,8], [3,6,9]
和最小的下降路径是 [1,4,7],所以答案是 12。

提示:
1 <= A.length == A[0].length <= 100
-100 <= A[i][j] <= 100

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-falling-path-sum 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 动态规划,每次取上一行的正上方、左上方、右上方的3个值的最小的
  • 加了左右两个边界,方便代码统一处理
代码语言:javascript
复制
class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& A) {
        const int N = A.size();
        vector<vector<int>> dp(N,vector<int>(N+2,INT_MAX));
        int i, j, minSum = INT_MAX;
        for(i = 0; i < N; i++) 
        	dp[0][i+1] = A[0][i];//初始化第一行
        for(i = 1; i < N; ++i)
        {
        	for(j = 1; j < N+1; ++j)
        	{
        		dp[i][j] = A[i][j-1]+min(min(dp[i-1][j-1],dp[i-1][j]),dp[i-1][j+1]);
        	}
        }
        for(i = 1; i < N+1; ++i)
        	minSum = min(minSum,dp[N-1][i]);
        return minSum;
    }
};

12 ms 10.2 MB

每个状态只与上一行有关,可以进行压缩,节省空间

代码语言:javascript
复制
class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& A) {
        const int N = A.size();
        vector<int> dp(N+2,INT_MAX);
        vector<int> temp(N+2,INT_MAX);
        int i, j, minSum = INT_MAX;
        for(i = 0; i < N; i++) 
            temp[i+1] = A[0][i];//初始化第一行
        for(i = 1; i < N; ++i)
        {
            for(j = 1; j < N+1; ++j)
            {   //注意加了两列后下标的错位
                dp[j] = A[i][j-1]+min(min(temp[j-1],temp[j]),temp[j+1]);
            }
            swap(dp,temp);
        }
        return *min_element(temp.begin(),temp.end());
    }
};

12 ms 9.7 MB

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档