菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
35
0

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

原创
05/13 14:22
阅读数 367

题目来源于力扣

理论基础

动态规划

三角形的最小路径和

题目描述

给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。说明:如果你可以只使用 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/200
35 点赞
0 评论
收藏
为你推荐 换一批