1. 程式人生 > >120. 三角形最小路徑和

120. 三角形最小路徑和

給定一個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。

例如,給定三角形:

[
     [2],
    [3,4],
   [6,5,7],
  [4,1,8,3]
]
自頂向下的最小路徑和為 11(即,2 + 3 + 5 + 1 = 11)。

說明:

如果你可以只使用 O(n) 的額外空間(n 為三角形的總行數)來解決這個問題,那麼你的演算法會很加分。

分析:考慮自底向上的解法簡單點, 動態轉移方程為: dp[m][n] = min(dp[m + 1][n], dp[m + 1][n + 1]) + triangle[m][n].

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