給定一個三角形數組,從頂點到底邊尋找一條路徑,使路徑上數字之和最小。每步只能移動到下一行相鄰的兩個數字之一。要求空間複雜度 O(n),n 為三角形高度。
輸入: [[2],[3,4],[6,5,7],[4,1,8,3]] 輸出: 11 (路徑: 2→3→5→1)
自底向上推導:
dp[j] = triangle[i][j] + min(dp[j], dp[j+1])class Solution:
def minimumTotal(self, triangle):
n = len(triangle)
dp = triangle[-1][:] # 複製最後一行
for i in range(n-2, -1, -1):
for j in range(i+1):
dp[j] = triangle[i][j] + min(dp[j], dp[j+1])
return dp[0]
時間 O(n²),空間 O(n),完美符合題目要求。