每日算法-三角形最小路径和(动态规划-中等)

735 阅读2分钟

题目

给定一个三角形,找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。 相邻的结点在这里指的是下标与上一层结点下标相同或者等于上一层结点下标+1的两个结点。例如,给定三角形: 示例:

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

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

动态规划

const minimumTotal = function(triangle) {
  let h = triangle.length;
  let arrs = new Array(h);
  for (let k = 0; k < h; k++) {
    arrs[k] = new Array(triangle[k].length);
  };
  for (let i = h -1; i >= 0; i--) {
    for (let j = 0; j < triangle[i].length; j++) {
      if (i == h-1) {
        arrs[i][j] = triangle[i][j];
      } else {
        arrs[i][j] = Math.min(arrs[i+1][j], arrs[i+1][j+1]) + triangle[i][j];
      }
    }
  }
  return arrs[0][0]

总结

  • 动态规划(Dynamic Programming,DP)是一种将复杂问题分解成更小的子问题来解决的优化技术。
  • 自底而上
  • 分治思想是将问题分解成相互独立的子问题,他们彼此是没有重叠的,而动态规划则是分解成相互重叠的子问题,他们相互之间是有关联的
  • 背包问题,斐波那契数列,图的全源最短路径没,硬币找零,矩阵链相乘,最长公共子序列,最小路径