leetcode--Triangle

来源:互联网 发布:apache 压力测试工具 编辑:程序博客网 时间:2024/06/04 00:15

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).
Note: Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.


思路:从下到上,选择相邻中较小者与上一层相加,不断更新。假若要求不改变源数据则如第二种方法,将最下层存储到另一数组中

class Solution {public:    int minimumTotal(vector<vector<int> > &triangle) {        for (int i = triangle.size() - 2; i >= 0; --i)            for (int j = 0; j < i + 1; ++j){                if(triangle[i+1][j] > triangle[i+1][j+1]){                    triangle[i][j] += triangle[i+1][j+1];                }else{                    triangle[i][j] += triangle[i+1][j];                }            }        return triangle[0][0];    }};class Solution {public:    int minimumTotal(vector<vector<int> > &triangle) {        int n = triangle.size();        vector<int> dp;        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];    }};
0 0
原创粉丝点击