LintCode Python 簡單級題目 109.數字三角形


原題描敘 :

 

給定一個數字三角形,找到從頂部到底部的最小路徑和。每一步可以移動到下面一行的相鄰數字上。

 注意事項

如果你只用額外空間復雜度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]

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM