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])