タイトル説明:
三角形の三角形が与えられた場合、上から下までの最小パス合計を見つけます。
各ステップは、次の行の隣接するノードにのみ移動できます。ここでの隣接ノードとは、添字が前のノードの添字と同じか、前のノードの添字 + 1 に等しい 2 つのノードを指します。つまり、現在の行の添字 i にある場合、次のステップは次の行の添字 i または i+1 に移動できます。
例 1:
入力: 三角形 = [[2],[3,4],[6,5,7],[4,1,8,3]]
出力: 11
説明: 以下の図に示すように:
2
3 4
6 5 7
4 1 8 3
トップダウンの最小パス合計は 11 (つまり、2 + 3 + 5 + 1 = 11) です。
例 2:入力: 三角形 = [[-10]]
出力: -10
ヒント:
1 <= 三角形.長さ <= 200
三角形[0].長さ == 1
三角形[i].長さ == 三角形[i - 1].長さ + 1
-104 <= 三角形[i][j] <= 104
出典: LeetCode
リンク: https://leetcode-cn.com/problems/IlPe0q
著作権は LeetCode に属します。営利目的での転載の場合は正式な許諾を得た方へ、非営利での転載の場合は出典を明記の上、ご連絡ください。
この質問の考え方は、下から上へ再帰し、ベクトルは [ ] で代入できるが、挿入には [ ] を使用できないことに注意し、添え字 out の問題に注意を払うことです。限界の。
class Solution {
public:
/*思路:从最下面往上面推,一直推到最顶层 当然首先要知道这个有多少层 所以要先用一个迭代器一直遍历到底层 然后再开始*/
int minimumTotal(vector<vector<int>>& triangle) {
int colnum = triangle.size(); //总共有几行 每行有跟行数相同的列
for(int i = colnum-2 ; i >= 0 ;i--) //注意不是减一
{
for(int j = 0 ; j <= i ;j ++)
{
if(triangle[i+1][j]>=triangle[i+1][j+1])
{
triangle[i][j] += triangle[i+1][j+1];
}else
{
triangle[i][j] += triangle[i+1][j];
}
}
}
return triangle[0][0];
}
};