1. 程式人生 > >三角形最小路徑和

三角形最小路徑和

total top des XA ota ace mini ive fin

中英題面

  給定一個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。

  Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.

  例如,給定三角形:

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

  自頂向下的最小路徑和為 11(即,2 + 3 + 5 + 1 = 11)。

  For example, given the following triangle

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

  The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).

  說明:

  如果你可以只使用 O(n) 的額外空間(n 為三角形的總行數)來解決這個問題,那麽你的算法會很加分。

  Note:

  Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.

算法   直接借用原來的數組,從三角形底部反著叠代算就行了。

  轉移方程:

   triangle[i - 1][j] += min(triangle[i][j], triangle[i][j + 1])

  答案:

    triangle[0][0]

  時間復雜度:

    O(N2)

  空間復雜度:

    O(1)

代碼
 1 class Solution:
 2     def minimumTotal(self, triangle):
 3         """
 4         :type triangle: List[List[int]]
5 :rtype: int 6 """ 7 for i in range(len(triangle) - 1, 0, -1): 8 for j in range(i): 9 triangle[i - 1][j] += min(triangle[i][j], triangle[i][j + 1]) 10 return triangle[0][0]

三角形最小路徑和