Leetcode triangle

题目描述

给出一个三角形,计算从三角形顶部到底部的最小路径和,每一步都可以移动到下面一行相邻的数字,

例如,给出的三角形如下:

[↵     [2],↵    [3,4],↵   [6,5,7],↵  [4,1,8,3]↵]

最小的从顶部到底部的路径和是2 + 3 + 5 + 1 = 11。注意:

如果你能只用O(N)的额外的空间来完成这项工作的话,就可以得到附加分,其中N是三角形中的行总数。

 

思路:只能使用O(N)的额外空间复杂度  那么设定dp[]数组

从底层开始,初始化dp[i]=triangle[size-1][i]

递推方程  dp[i]=min(dp[i],dp[i+1])+triangle[k][i]  其中k为层数  从size-1直到0

 

 int minimumTotal(vector<vector<int> > &triangle) {
        
        if(triangle.size()==0)
            return 0;
        int len=triangle.size();
        vector<int> dp(len,0);
        //自底向上
        for(int i=len-1;i>=0;i--) //每层
            for(int j=0;j<triangle[i].size();j++) //每层的元素
            {
                if(i==len-1)
                    dp[j]=triangle[i][j];//最后一层是原始数据
                else
                    dp[j]=min(dp[j],dp[j+1])+triangle[i][j];  //不断向上覆盖
            
            }
    
        return dp[0];

    }

 

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读