用 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] 中的最小值
- for j := 0 to i
- 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
廣告