Leetcode 120. Triangle

關關的刷題日記發表於2018-01-10

給定一個三角形,找到從頂端到低端的最小路徑和。每一次可以移動到下一排的相鄰的數。能否實現只需要O(n)空間複雜度的演算法,n為三角的行數。

 

思路:對於每一個點來說,以其為端點的路徑要麼是從左上點下來的,要麼是從右上點下來的,所以以這點為端點的路徑和sum[i][j]=min(sum[i-1][j-1], sum[i-1][j])+這點值,採用動規的方法來做,從三角形下面往上動規就不用考慮邊界了。

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


相關文章