120.三角形最小路径和

2020-06-04
三角形最小路径和

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

相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。

题解:
思路1:动态规划
/**
 * @param {number[][]} triangle
 * @return {number}
 */
var minimumTotal = function (triangle) {
  let result = new Array(triangle.length).fill([]); // 存储到每个下标的最小路径和
  if (triangle.length === 0) return 0; 
  for (let i = 0; i < triangle.length; i++) {
    result[i] = [];
    for (let j = 0; j < triangle[i].length; j++) {
      if (i === 0) result[i][j] = triangle[i][j]; // 如果是第一行 最小路径就是每一个节点本身
      else { // 第二行开始 最小路径等于 本身 + 上一层的相邻的两项中较小的那个 如果刚好处于每一行的第一个或最后一个 则缺少一个相邻节点 
        // 缺少的按最大数处理
        result[i][j] = triangle[i][j] +
          Math.min(isNaN(result[i - 1][j]) ? Number.MAX_SAFE_INTEGER : result[i - 1][j],
            isNaN(result[i - 1][j - 1]) ? Number.MAX_SAFE_INTEGER : result[i - 1][j - 1]);
      }
    }
  }
  // 最后一行的最小值就是完整路径的最小和了
  return Math.min(...result[result.length - 1]);
};
原文地址:https://www.cnblogs.com/lanpang9661/p/13041689.html