Leetcode 120三角形の経路と最小(三角)

Leetcode 120三角形の最小パスと

1つのタイトルの説明(Leetcodeトピックリンク

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

[
     [2],
    [3,4],
   [6,5,7],
  [4,1,8,3]
]

トップダウンと最小経路11(すなわち、2 + 3 + 5 + 1 = 11)。
  注:この問題を解決するために、あなただけの余分なスペースをO(n)を使用することができます(nは行数が三角形である)場合には、お使いのアルゴリズムはプラスになります。

この問題に対する解決策2

  この題するダイナミックプログラミングの問題は、マトリックスまたは対象の構造に直接入力されたデータを使用して構築定義することができます。 D P [ ] [ J ] DP [I] [J] 最初に到達します J (i、j)は 最小経路ノード、状態遷移です。
D P [ ] [ J ] = メートル n個 D P [ - 1 ] [ j 1 ] + t r i a n g l e [ i ] [ j ] , D P [ i 1 ] [ j ] + t r i a n g l e [ i ] [ j ] ) DP [I] [J] =分(DP [I-1] [J-1] +三角形[I]、[J]、DP [I-1]〜[J] +三角形[I] [J])
の入力データを直接使用する場合は、次の式になります D P DP 置換されます t r i a n g l e 三角形 できます。

class Solution:
    def minimumTotal(self, triangle: List[List[int]]) -> int:
        length = len(triangle)
        for i in range(1,length):
            for j in range(0,i+1):
                if j == 0:
                    triangle[i][j] = triangle[i-1][j] + triangle[i][j]
                    continue
                if j == i:
                    triangle[i][j] = triangle[i-1][j-1] + triangle[i][j]
                    continue
                triangle[i][j] = min(triangle[i-1][j-1] + triangle[i][j], triangle[i-1][j] + triangle[i][j])
        return min(triangle[length-1])

  あなただけ考慮すれば O ( n ) O(N) 第1の追加の空間、すなわち、唯一一次元アレイを開き、あなたは、ボトムアップ法を使用することができ、 D P DP 配列の初期化です t r i a n g l e 三角形 状態遷移に基づいて、次式最後の行の、最終的な結果は D P [ 0 ] DP [0]
D P [ j ] = m i n ( D P [ j ] + t r i a n g l e [ i ] [ j ] , D P [ j + 1 ] + t r i a n g l e [ i ] [ j ] ) DP [J] =分(DP [J] +三角形[I]、[J]、DP [J + 1] +三角形[I] [J])

class Solution:
    def minimumTotal(self, triangle: List[List[int]]) -> int:
        length = len(triangle)
        DP = triangle[-1]
        i = length - 2
        while i >= 0:
            for j in range(0, 1+i):
                DP[j] = min(DP[j] + triangle[i][j], DP[j+1]+triangle[i][j])
            i -= 1
        return DP[0]
公開された32元の記事 ウォン称賛53 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq_39378221/article/details/104056290