原題描敘 :
給定一個數字三角形,找到從頂部到底部的最小路徑和。每一步可以移動到下面一行的相鄰數字上。
注意事項
如果你只用額外空間復雜度O(n)的條件下完成可以獲得加分,其中n是數字三角形的總行數。
樣例
比如,給出下列數字三角形:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
從頂到底部的最小路徑和為11 ( 2 + 3 + 5 + 1 = 11)。
題目分析:
思路:
從二維數組的倒數第二行開始往上,每一行的元素改為下一行能與之相加的兩個數較小者與其相加之后的和,如題中給出的例子,步驟為:
[ [ [
[2], [2], [11]
[3,4], → [9,10] → ]
[7,6,10] ]
]
參照:http://www.cnblogs.com/xiaocainiao2hao/p/5359892.html
class Solution: """ @param triangle: a list of lists of integers. @return: An integer, minimum path sum. """ def minimumTotal(self, triangle): # write your code here n = len(triangle) if triangle is None: return None elif triangle[0][0] is None: return None elif n == 1: # 此處if分支可省略 return triangle[0][0] # 將triangle[i+1][j]和triangle[i+1][j+1]中的小值加到上一行的triangle[i][j]中 for i in range(n-2,-1,-1): le = len(triangle[i]) for j in range(0,le): minx = min(triangle[i+1][j],triangle[i+1][j+1]) triangle[i][j] += minx return triangle[0][0]