Lintcode 109.数学三角形

来源:互联网 发布:vb 线程钩子实例 编辑:程序博客网 时间:2024/06/02 06:18

给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。

 注意事项

如果你只用额外空间复杂度O(n)的条件下完成可以获得加分,其中n是数字三角形的总行数。

分析:

如果从上往下进行计算,会发现越是接近底层的子问题被重复计算的次数越多,为了避免重复的计算,使计算更加简洁。所以从下往上计算子问题的最优解,越靠近底层的子问题越先计算,大大减少计算量.


class Solution {public:    /*     * @param triangle: a list of lists of integers     * @return: An integer, minimum path sum     */    int minimumTotal(vector<vector<int>> &triangle) {        // write your code here             if(triangle.empty())  return 0;     if(triangle.size()==1)     return triangle[0][0];        for(int i=n-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];    }};


原创粉丝点击