1. 首页

LeetCode 120. 三角形最小路径和

题目描述

难度:Middle

相关话题:数组动态规划

给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。

例如,给定三角形:

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

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

说明:

如果你可以只使用 O (n )的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。


思路:

  • 修改原数组:
/**
 * @param {number[][]} triangle
 * @return {number}
 */
var minimumTotal = function(triangle) {
  for(let i=1;i<triangle.length;i++){
    for(let j=0;j<triangle[i].length;j++){
      let left=Infinity,right=Infinity
      if(j>0)left=triangle[i-1][j-1]
      if(j<triangle[i-1].length)right=triangle[i-1][j]
      triangle[i][j]+=Math.min(left,right)
    }
  }
  return Math.min.apply(Math,triangle[triangle.length-1])
};
  • 不修改原数组,空间O(n)
/**
 * @ Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @param {number[][]} triangle
 * @return {number}
 */
var minimumTotal = function(triangle) {
  let lastLayer=[triangle[0][0]]
  for(let i=1;i<triangle.length;i++){
    for(let j=lastLayer.length;j>=0;j--){
      let left=Infinity,right=Infinity
      if(j>0)left=lastLayer[j-1]
      if(j<lastLayer.length)right=lastLayer[j]
      if(lastLayer[j]==null)lastLayer[j]=0
      lastLayer[j]=triangle[i][j]+Math.min(left,right)
    }
  }
  return Math.min.apply(Math,lastLayer)
};

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:LeetCode 120. 三角形最小路径和

链接:https://www.javascriptc.com/4485.html

« LeetCode 121. 买卖股票的最佳时机
给在座各位“老划水员”分享10款提高幸福指数的vscode“摸鱼神器”»
Flutter 中文教程资源

相关推荐

QR code