リンク演習 <三角形の最小パスの和>

タイトル説明:

三角形の三角形が与えられた場合、上から下までの最小パス合計を見つけます。

各ステップは、次の行の隣接するノードにのみ移動できます。ここでの隣接ノードとは、添字が前のノードの添字と同じか、前のノードの添字 + 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]; 
    }
};

おすすめ

転載: blog.csdn.net/mc10141222/article/details/123784548