(M)Dynamic Programming:120. Triangle

来源:互联网 发布:手机伴奏降调软件 编辑:程序博客网 时间:2024/06/02 04:33

没有想到递归关系。看了大神的分析:到第i层的第k个顶点的最小路径长度表示为dp[i][k]。从第二行开始,triangle[i][j] = min(triangle[i - 1][j - 1], triangle[i - 1][j]), 然后两边的数字直接赋值上一行的边界值,由于限制了空间复杂度,所以我干脆直接就更新triangle数组。

class Solution {public:    int minimumTotal(vector<vector<int>>& triangle) {        int n = triangle.size();        for(int i = 1; i < n; ++i)        {            for(int j = 0; j < triangle[i].size(); ++j)            {                if(j == 0) triangle[i][j] += triangle[i-1][j];                else if(j == triangle[i].size() - 1)                    triangle[i][j] += triangle[i - 1][j - 1];                else                    triangle[i][j] += min(triangle[i - 1][j - 1], triangle[i - 1][j]);            }        }        int res = triangle[n - 1][0];        for(int i = 0; i < triangle[n - 1].size(); ++i)            res = min(res, triangle[n - 1][i]);        return res;    }};


原创粉丝点击