[120] Leetcode三角最小経路と

Leetcode 120三角形の最小パスと

タイトル説明

三角形を考えると、最小値とトップダウンパスを見つけます。各ステップは、次の行の隣接ノードへ移動することができます。

例えば、三角形を与え:

[
[2]、
[3,4]、
[6,5,7]、
[4,1,8,3]
]
トップダウンと最小経路11(すなわち、2 + 3 + 5 + 1 = 11)。

説明:

あなたはこの問題を解決する唯一のO(n)の余分なスペース(nは三角形のように行数)を使用することができます場合は、あなたのアルゴリズムはプラスになります。

出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/triangle

思考

Dpが変数サイトを格納します。Mは、層の数が提供されている、iが0からM-1まで、jは各レイヤの要素のインデックスです。
次の3つの場合:
J = 0:
トライアングル[I] [J] =トライアングル[1-I] [J]トライアングル+ [I] [J]
J = LEN(三角形[I] ) - 1
トライアングル[I] [J] =トライアングル[I] [J]トライアングル+ [J. 1-] [1-I]
以外の場合:
[1-I]トライアングル[I] [J] =分(トライアングル[J- 1]、三角形[I-1 ] [J])+三角形[I] [J]

コード

class Solution:
    def minimumTotal(self, triangle: List[List[int]]) -> int:
        if triangle == [[]]:
            return 0
        if len(triangle)==1:
            return triangle[0][0]
        m = len(triangle)
        for i in range(1,m):
            for j in range(len(triangle[i])):
                if(j==0):
                    triangle[i][j] = triangle[i-1][j] + triangle[i][j]
                elif(j==len(triangle[i])-1):
                    triangle[i][j] = triangle[i][j] + triangle[i-1][j-1]
                else:
                    triangle[i][j] = min(triangle[i-1][j-1],triangle[i-1][j]) + triangle[i][j]
        return min(triangle[m-1])
公開された97元の記事 ウォン称賛55 ビュー130 000 +

おすすめ

転載: blog.csdn.net/voidfaceless/article/details/104108718