Triangle

来源:互联网 发布:curl json 格式化 编辑:程序博客网 时间:2024/06/05 03:13
-----QUESTION-----

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.

-----SOLUTION-----
class Solution {public:    int minimumTotal(vector<vector<int>> &triangle) {        vector<int> tmp;        vector<vector<int>> sum;        sum.push_back(triangle[0]);        int height = triangle.size();        int width;        for(int i = 1; i< height; i++)        {            width = triangle[i].size();            for (int j = 0; j< width; j++)            {                if(j==0)                {                    tmp.push_back(triangle[i][j]+sum[i-1][j]);                }                else if(j==width-1)                {                    tmp.push_back(triangle[i][j]+sum[i-1][j-1]);                }                else                {                    tmp.push_back(min(triangle[i][j]+sum[i-1][j-1],triangle[i][j]+sum[i-1][j]));                }                }            sum.push_back(tmp);            tmp.clear();        }        int minSum = sum[height-1][0];        for(int i = 1; i<triangle[height-1].size(); i++)        {            if(sum[height-1][i] < minSum)                minSum = sum[height-1][i];        }        return minSum;    }};


0 0
原创粉丝点击