Leetcode 120 Triangle

Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.

For example, given the following triangle

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

The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).

设置数组m为最后一行,然后由下至上,转移方程 m[j] = t[i][j] + min(m[j],m[j+1])

var minimumTotal = function(t) {
    var m = t[t.length - 1]
    for (var i=t.length-2;i>=0;i--)
        for(var j=0;j<=i;j++)
            m[j] = t[i][j] + Math.min(m[j],m[j+1])
    return m[0]
}

也可以自上而下,但是需要预先处理边界情况防止越界

class Solution(object):
    def minimumTotal(self, triangle):
        dp = triangle[:]
        for i in range(1,len(dp)):
            dp[i][0] += dp[i-1][0]
            dp[i][-1] += dp[i-1][-1]
            for j in range(1,len(dp[i-1])):
                dp[i][j] += min(dp[i-1][j],dp[i-1][j-1])
        return min(dp[-1])
posted @ 2015-06-21 09:55  lilixu  阅读(116)  评论(0编辑  收藏  举报