Leetcode (120) 삼각 최소 경로와
제목 설명
삼각형을 감안할 때, 최소 및 하향식 (top-down) 경로를 찾을 수 있습니다. 각 단계는 다음 라인에 인접한 노드로 이동할 수 있습니다.
예를 들어, 삼각형을 제공 :
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
하향식 최소 경로 (11) (즉, 2 + 3 + 5 + 1 = 11).
설명 :
이 문제를 해결하기 위해 (삼각형으로 행 N 수)에만 O (n)의 추가 공간을 사용할 수있는 경우에, 당신의 알고리즘은 플러스가 될 것입니다.
출처 : 숙박 버튼 (LeetCode)
링크 : HTTPS : //leetcode-cn.com/problems/triangle
사고
DP 변수는 사이트를 저장합니다. M은 층의 수는 m-0에서 1로, I를 제공하고, j는 각 계층의 요소의 인덱스이다.
다음 세 가지 경우 :
J = 0 :
삼각 [I] [J] = 삼각형 [I-1.] [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])