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. 

解题思路 这个题属于动态规划问题,解题思路如下:
法一:从上到下, 下一行的结果根据上一行的路径累计和而计算。
triangle[i][j] += min(triangle[i-1[j-1],triangle[i-1][j]),这样需要处理j=0和j=最大值。
法二:从下往上,每一行的结果根据下面一行的路基累计和而计算。
triangle[i][j] += min(triangle[i + 1][j], triangle[i + 1][j + 1])

实现代码:
              class Solution {
public:
 //在二维vector容器中,第i行容器包含有i+1个元素(针对triangle来说);
    int minimumTotal(vector > &triangle) {
        for (int i = triangle.size() - 2; i >= 0; --i)  //第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];  
    }
};

你可能感兴趣的:(动态规划)