Leetcode-120 三角形最小路徑和

題目

快樂做一個DP廚。

二維樸素解法

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

一維壓縮

dp[j]:表示行中的第j個元素能達到的最小值。
自底而上計算。

例如題中測試樣例

4 1 8 3 0 
7 6 10 3 0 
9 10 10 3 0 
11 10 10 3 0 
class Solution {
public:
    int minimumTotal(vector<vector<int>>& triangle) {
        int level=triangle.size();
        vector<int> dp(level+1,0);
        for(int i=level-1;i>=0;i--)
        {
            for(int j=0;j<=i;j++)
            {
                dp[j]=min(dp[j+1],dp[j])+triangle[i][j];
            }
        }
        return dp[0];
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章