[LeetCode]题解(python):120 Triangle

题目来源


https://leetcode.com/problems/triangle/

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

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).

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.


题意分析


Input:一个三角矩阵

Output:最短路径

Conditions:使用O(n)空间


题目思路


首先初始化一个n大小的array,然后,初始化array为0,array[0]就是triangle的第一行的值,然后遍历剩余行,不断更新array,注意要从后往前遍历,否则会覆盖前面值。


AC代码(Python)

 1 class Solution(object):
 2     def minimumTotal(self, triangle):
 3         """
 4         :type triangle: List[List[int]]
 5         :rtype: int
 6         """
 7         if len(triangle) == 0: return 0
 8         array = [0 for i in range(len(triangle))]
 9         array[0] = triangle[0][0]
10         for i in range(1,len(triangle)):
11             for j in range(len(triangle[i]) - 1, -1, -1):
12                 if j == len(triangle[i]) - 1:
13                     array[j] = array[j - 1] + triangle[i][j]
14                 elif j == 0:
15                     array[j] = array[j] + + triangle[i][j]
16                 else:
17                     array[j] = min(array[j-1], array[j]) + triangle[i][j]
18         return min(array)
19         

 

posted @ 2016-05-24 16:47  loadofleaf  Views(801)  Comments(0Edit  收藏  举报