给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 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]); };