120. Triangle

问题:三角形,从顶到底最小路径

解法类型:DP动态规划

思路:

最原始思路:穷举每一行每个点的最小路径值,下一行=上一行累计,形成2维数组(n*n),再从数组最后一行选取最小值。

进化思路:每行计算,只需要上一行的结果,则只需要2维数组(2*n)两行保存数据即可。

再进化思路:如何化为只需要1维数组,则需计算值不覆盖接下来要计算的值,即从后往前计算。(原来从顶到底->从底到顶)

      每个点的路径 = 本点值 + 下一行的两个中最小的                 dp[j] = triangle[i][j] + min(dp[j], dp[j+1]);

代码参考:

 1 class Solution {
 2 public:
 3     int minimumTotal(vector<vector<int>>& triangle) {
 4         vector<int> dp(triangle[triangle.size()-1]);
 5         int i, j;
 6         for(i=triangle.size()-2; i>=0; i--){
 7             for(j=0; j<triangle[i].size(); j++){
 8                 dp[j] = triangle[i][j] + min(dp[j], dp[j+1]);
 9             }
10         }
11         return dp[0];
12     }
13 };

 

posted @ 2020-02-16 14:34  habibah_chang  阅读(110)  评论(0)    收藏  举报