题目
来源:三角形最小路径和
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
示例
解题思路
1. 思路
考虑用动态规划解决,dp[n]表示在第n行累积的路径中的最小值。枚举第n行各个元素,其对应的最小路径中的最小值,即为dp[n]。
自顶向下:
对第n行中第m个元素,其状态只与第n-1行中的第m-1和第m个元素的状态有关,所以可以分三种情况讨论:
- m = 0, 元素状态只与上一行第m个元素的状态有关;
- m = row.length - 1, 元素状态只与上一行第m-1个元素的状态有关;
- 以上两种情况都不是,元素状态与上一行第m-1和 第m个元素状态有关。
自底向上
对于第n行中第m个元素,其状态只与第n+1行中的第m个和第m+1个元素的状态有关。
2. 代码
var minimumTotal = function(triangle) {
var dp = new Array(triangle.length + 1).fill(0);
for (let i = triangle.length - 1; i >= 0 ; i--) {
for (let j = 0; j < triangle[i].length; j++) {
dp[j] = Math.min(dp[j], dp[j + 1]) + triangle[i][j];
}
}
return dp[0];
};
还可以考虑不使用dp数组,直接第i+1行的值加在第i行上,不断进行更新。