120. Triangle
1.問題
2.想法
提問
確認題意: binary tree的類型, 若非perfect tree, 則無法確定left或right一定存在
function header, parameter
test input
觀察
第一個邊有一個成員, 第二個邊有兩個成員, 第三個邊有三個成員, 這是一個正三角形
說明想法
動態規劃, 跟機器人的路線可能性很像, 不同的只是改成了三角形, 左右兩邊 (正確來說是對角線與row 0)的規則是matrix[j][i] += matrix[j - 1][i], 而中心部分的來源有兩個, 取最小值
切記matrix的縱座標為row (y), 橫坐標為column(x), 表示法為matrix[r][c]
測試計算複雜度
3.程式碼
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
if (triangle.size() == 0) {
return 0;
}
int n = triangle.size();
for (int r = 1; r < n; r++) {
//對角線
triangle[r][0] += triangle[r - 1][0];
triangle[r][r] += triangle[r - 1][r - 1];
//中間
for (int c = 1; c < triangle[r].size() - 1; c++) {
triangle[r][c] = triangle[r][c] + min(triangle[r - 1][c - 1], triangle[r - 1][c]);
}
}
int minVal = INT_MAX;
for (int c = 0; c < triangle[n - 1].size(); c++) {
minVal = min(minVal, triangle[n - 1][c]);
}
return minVal;
}
};
Last updated