- 状态转移方程
- 顶点,i=0,j=0
dp[0][0]=triangle[0][0]
- 左边界,j=0
dp[i][j]=dp[i-1][j]+triangle[i][j]
- 右边界,j=i
dp[i][j]=dp[i-1][j-1]+triangle[i][j]
- 中间点,
dp[i][j] = min(dp[i-1][j-1],dp[i-1][j])+triangle[i][j]
- 顶点,i=0,j=0
/**
* @param {number[][]} triangle
* @return {number}
*/
var minimumTotal = function(triangle) {
// 1.上边界
// i=0,j=0
// 2.左边界
// j=0 i=
// 3.右边界
// j=i
let m = triangle.length, n = triangle[m-1].length;
let dp = new Array(m).fill(0).map(()=>new Array(n).fill(0));
dp[0][0] = triangle[0][0];
for(let i=0;i<m;i++){
for(let j=0;j<=i;j++){
if(i==0&&j==0){
dp[i][j] = triangle[0][0]
}else if(j==i){
dp[i][j] = dp[i-1][j-1]+triangle[i][j]
}else if(j==0){
dp[i][j] = dp[i-1][j] +triangle[i][j]
}else {
dp[i][j] = Math.min(dp[i-1][j],dp[i-1][j-1])+triangle[i][j]
}
}
}
return Math.min(...dp[m-1])
};
执行结果:通过
执行用时:72 ms, 在所有 JavaScript 提交中击败了33.72%的用户
内存消耗:42.9 MB, 在所有 JavaScript 提交中击败了35.78%的用户
通过测试用例:44 / 44