算法题:三角形的最小路径和

题目来源于力扣

理论基础

动态规划

三角形的最小路径和

题目描述

给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。说明:如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。

示例

例如,给定三角形:

[
     [2],
    [3,4],
   [6,5,7],
  [4,1,8,3]
]

自顶向下的最小路径和为11(即 2+3+5+1= 11)。

解题思路

动态规划,自底向上累加,“每一步只能移动到下一行中相邻的结点上” 是关键

Python 解法

class Solution(object):

    def minimumTotal(self, triangle):
        if not triangle: return 0

        res = triangle[-1] # 最后一组元素
        for i in xrange(len(triangle) - 2, -1, -1): # 倒序循环
            for j in xrange(len(triangle[i])): # 每一层从0开始
                res[j] = min(res[j], res[j+1]) + trangle[i][j]

        return res[0]
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!