leetcode 120- triangle

2018-12-19  本文已影响0人  Ariana不会哭
图片.png

例子:
[
[2], ------选中2
[3,4],------选中3
[6,5,7],------选中5
[4,1,8,3]------选中1
]
解释:首先不是选取每一行中最小的数值,而是选中相邻位置的最小数。例如:如果在第三行选中5,在第五行只能在1 8之中选择最小的。
如果这样解释此题就很容易想到DP:动态规划

int minimumTotal(vector<vector<int>>& triangle) {
    int n = triangle.size();
    vector<int> dp(triangle.back());
    for (int i = n - 2; i >= 0; --i) {
        for (int j = 0; j <= i; ++j) {
            dp[j] = min(dp[j], dp[j + 1]) + triangle[i][j];
        }
    }
    return dp[0];
}

JAVA:

public int minimumTotal(List<List<Integer>> triangle) {
        int n = triangle.size();
        List<Integer> dp=new ArrayList<Integer>(triangle.get(triangle.size()-1));
        for (int i = n - 2; i >= 0; --i) {
            for (int j = 0; j <= i; ++j) {
                dp.set(j, Math.min(dp.get(j), dp.get(j+1)) + triangle.get(i).get(j));
            }
        }
        return dp.get(0);
    }
上一篇下一篇

猜你喜欢

热点阅读