用 C++ 求字尾波蘭表示式的值


假設我們有一個三角形。我們必須找到從上到下的最小路徑和。在每一步中,我們都可以移動到下面一行的相鄰數字。

例如,如果以下三角形為

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

從上到下的最小路徑和為 11 (2 + 3 + 5 + 1 = 11)。

我們來看看步驟

  • 建立一個表,用於動態規劃方法。
  • n := 三角形的尺寸
  • for i := n – 2 down to 0
    • for j := 0 to i
      • dp[j] := triangle[i, j] + dp[j] 和 dp[j + 1] 中的最小值
  • return dp[0]

我們來看看以下實現以更好地理解

示例

 線上演示

class Solution {
   public:
   void printVector(vector <int>& v){
   for(int i = 0; i < v.size(); i++)cout << v[i] << " ";
   cout << endl;
}
int minimumTotal(vector<vector<int>>& triangle) {
   vector <int> dp(triangle.back());
   int n = triangle.size();
   for(int i = n - 2; i >= 0; i--){
      for(int j = 0; j <= i; j++){
         dp[j] = triangle[i][j] + min(dp[j], dp[j + 1]);
      }
      // printVector(dp);
   }
   return dp[0];
   }
};

輸入

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

輸出

11

更新日期: 31-Jan-2020

273 次瀏覽

啟動您的職業

完成課程獲得認證

開始
廣告