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 is11(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.
int minimumTotal(vector<vector<int> > &triangle) {
        int n = triangle.size();
        int res = 1e8;
        if(n==1)
        {
            res = triangle[0][0];
        }
        for(int i = 1; i < n;i++){
            for(int j = 0;j <= i;j++){
            if(j == 0){
               triangle[i][j] = triangle[i][j]+triangle[i-1][j]; 
            }else if(i == j){
               triangle[i][j] = triangle[i][j]+triangle[i-1][j-1];
            }
            else{
                triangle[i][j] = triangle[i][j]+min(triangle[i-1][j],triangle[i-1][j-1]);
            }
            if(i == n-1){
                res = min(res,triangle[i][j]);
            }
            }
        }
        return res;
    }

后退法:

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

 

posted @ 2018-02-08 11:18  mysunicey  阅读(147)  评论(0编辑  收藏  举报