LeetCode: Triangle

Title:

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).

 

思路:开始以为是贪心,其实并不是,是动态规划。倒过来想,从底向上,转移方程 f[i][j] += min(f[i+1][j],f[i+1][j+1]). 空间复杂度O(1)

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

 

posted on 2015-05-15 11:18  月下之风  阅读(136)  评论(0编辑  收藏  举报

导航