# 62. Triangle **难度: Medium** ## 刷题内容 > 原题连接 * [https://leetcode-cn.com/problems/minimum-path-sum/](https://leetcode-cn.com/problems/minimum-path-sum/) > 内容描述 给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。 #### 说明: 如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。 ## 解题方案 ******- 时间复杂度: O(N)******- 空间复杂度: O(1)****** 每个坐标的最小期望 = Min(左上的最小期望, 右上的最小期望) + 当前坐标值。 这样一次循环即可。 **Tips:** 特殊情况: * 顶点的最小期望是自己 * 最左侧的点的期望 = 当前坐标值 + 上方的值 * 最右侧的点的期望 = 当前坐标值 + 上方的值 代码: ```javascript /** * @param {number[][]} triangle * @return {number} */ var minimumTotal = function(triangle) { if (triangle[triangle.length - 1].length === 1) { return triangle[0][0] } triangle.forEach((list, height) => { list.forEach((n, i) => { if (height === 0) { triangle[height][i] = triangle[height][i] } else if (i === 0) { triangle[height][i] = triangle[height][i] + triangle[height - 1][0] } else if (i === list.length - 1) { triangle[height][i] = triangle[height][i] + triangle[height - 1][i - 1] } else { triangle[height][i] = triangle[height][i] + Math.min(triangle[height - 1][i], triangle[height - 1][i - 1]) } }) }) return Math.min(...triangle[triangle.length - 1]) }; ```