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

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

题目大意

给定一个三角形的矩阵,给出总三角形顶部到底部的最短路径的值

解题思路

从上层开始,计算到达每个元素时的最短路径的值,并特殊化处理边缘的值;且更新每一行最短路径的值时,从末端往前更新

代码

class Solution(object):
    def minimumTotal(self, triangle):
        """
        :type triangle: List[List[int]]
        :rtype: int
        """
        sums = [0 for i in range(len(triangle))]
        sums[0] = triangle[0][0]

        for i in range(1, len(triangle)):
            for j in range(len(triangle[i]) - 1, -1, -1):
                if j == 0:
                    sums[j] = sums[j] + triangle[i][j]
                elif j == len(triangle[i]) - 1:
                    sums[j] = sums[j - 1] + triangle[i][j]
                else:
                    sums[j] = min(sums[j], sums[j - 1]) + triangle[i][j]
        return min(sums)  
posted @ 2016-03-25 11:37  slurm  阅读(128)  评论(0编辑  收藏  举报