Leetcode 120 Triangle

Posted yuyinzi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 120 Triangle相关的知识,希望对你有一定的参考价值。

题目介绍

给定一个三角形状的数组,寻找从顶部到底部上所有值之和最小的路径。只能移动至下一层的相邻节点。

Example:

[
     [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是三角形的行数。

Solution

针对底部的每一个节点,有很多路径可以到达,寻求一个最优解,因此这是一个动态规划问题。每个节点可以由上一层与其同下标或者下标小于1的节点向下而来。

因此可以采用一个一维数组,表示最后一行(也即是三角形的行数)中到每一个节点的路径之和。由于每个节点只受其下标或者比其小1的下标的节点影响,因此针对每一行,应当从后往前遍历,不断更改每一层的节点路径之和。

class Solution(object):
    def minimumTotal(self, triangle):
        """
        :type triangle: List[List[int]]
        :rtype: int
        """
        dp = [float(‘inf‘) for i in range(len(triangle))]
        if triangle:
            dp[0] = triangle[0][0]
            # 遍历每一层
            for i in range(1, len(triangle)):
                # 从后往前遍历每一层的节点
                for j in range(len(triangle[i])-1, -1, -1):
                    dp[j] = min(triangle[i][j] + dp[j], triangle[i][j] + dp[max(j - 1, 0)])
        return min(dp)

以上是关于Leetcode 120 Triangle的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode120Triangle[DP]

leetcode 120. Triangle

leetcode 120 Triangle ----- java

LeetCode120 Triangle

LeetCode120——Triangle

LeetCode OJ 120. Triangle