Lintcode109 Triangle solution 题解

【题目描述】

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

给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。

】:如果你只用额外空间复杂度O(n)的条件下完成可以获得加分,其中n是数字三角形的总行数。

【题目链接】

www.lintcode.com/en/problem/triangle/

【题目解析】

首先来看自顶向下,根据题目我们知道,每向下一层,我们只能选择邻接数字进行累加,譬如上面第1行的数字3,它的下一行邻接数字就是6和5。

我们假设dp[m][n]保存了第m行第n个节点的最小路径和,我们有如下dp方程

·dp[m + 1][n] = min(dp[m][n], dp[m][n - 1]) + triangle[m + 1][n] if n > 0

·dp[m + 1][0] = dp[m][0] + triangle[m + 1][0]

因为想要使用O(n)的空间,所以需要滚动计算,使用一个一位数组保存每层的最小路径和。为了防止计算的时候不覆盖以前的值,所以我们需要从后往前计算。

【参考答案】

www.jiuzhang.com/solutions/triangle/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,769评论 0 33
  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 3,327评论 0 18
  • 分治方法 将问题划分成互不相交的子问题 递归地求解子问题 将子问题的解组合起来 动态规划(两个要素:最优子结构、子...
    superlj666阅读 515评论 0 0
  • A - 数字三角形题解:假设getMax(i,j)表示点(i,j)到底部的最长路径,那么getMax(i,j)=m...
    Gitfan阅读 896评论 0 0
  • 数学课上,当我提问刘彬回答问题时,他低着头,声音小得像苍蝇叫,我以前多次鼓励他大声发言,没有效果,今天我就批评他:...
    静心专注阅读 699评论 0 1