[LeetCode]Triangle

来源:互联网 发布:佛山专业网络推广公司 编辑:程序博客网 时间:2024/05/22 04:42

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.

考虑每步的走法,写出简单的Dp。

F(i,j) = min(F(i-1,j-1),F(i-1,j))+triangle[i][j];

class Solution {public:    int minimumTotal(vector<vector<int>>& triangle) {        int height = triangle.size();        int ret = INT_MAX;        for(int i=1; i<height; ++i){            for(int j=0; j<triangle[i].size(); ++j){                if(j == 0)                    triangle[i][j] = triangle[i-1][j]+triangle[i][j];                else if(j == triangle[i].size()-1)                    triangle[i][j] = triangle[i-1][j-1]+triangle[i][j];                else                    triangle[i][j] = min(triangle[i-1][j]+triangle[i][j],triangle[i-1][j-1]+triangle[i][j]);            }        }        for(int j=0; j<triangle[height-1].size(); ++j){            ret = min(ret,triangle[height-1][j]);        }        return ret;    }};


0 0