js(106)~120. 三角形最小路径和(dp)

191 阅读1分钟

120. 三角形最小路径和

image.png

方法一 二维数组

var minimumTotal = function(triangle) {
    const h = triangle.length;
    const dp = new Array(h);

    for(let i = 0; i < h; i ++) {
        dp[i] = new Array(triangle[i].length)
    }

    for(let i = h-1; i >= 0; i --) {
        for(let j = 0; j < triangle[i].length; j ++) {
            if(i === h - 1) {
                dp[i][j] = triangle[i][j]
            } else {
                dp[i][j] = Math.min(dp[i+1][j], dp[i+1][j+1]) + triangle[i][j];
            } 
        }
    }

    return dp[0][0]

};

方法二 本来循环写的 但是我给他优化了中直接dp取最后一行的值

方法二 一维数组

var minimumTotal = function(triangle) {
    // dp 用最后一行表示
    const dp = triangle[triangle.length - 1]
   // 然后滚动修改dp中的数值
    for(let i = dp.length - 2; 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]

};