首页 > 其他 > 详细

LintCode: Triangle

时间:2015-11-30 13:03:09      阅读:244      评论:0      收藏:0      [点我收藏+]

C++

逆推

 1 class Solution {
 2 public:
 3     /**
 4      * @param triangle: a list of lists of integers.
 5      * @return: An integer, minimum path sum.
 6      */
 7     int minimumTotal(vector<vector<int> > &triangle) {
 8         // write your code here
 9         if (triangle.size() == 0)
10             return 0;
11             
12         vector<int> dp(triangle.size());
13         
14         dp[0] = triangle[0][0];
15         for(int i = 1; i < triangle.size(); i++)
16             for(int j = triangle[i].size() - 1; j >= 0; j--)
17                 if (j == 0)
18                     dp[j] = dp[j] + triangle[i][j];
19                 else if (j == triangle[i].size() - 1)
20                     dp[j] = dp[j-1] + triangle[i][j];
21                 else
22                     dp[j] = min(dp[j-1], dp[j]) + triangle[i][j];
23                     
24         int ret = INT_MAX;
25         for(int i = 0; i < dp.size(); i++)
26             ret = min(ret, dp[i]);
27             
28         return ret;  
29     }
30 };

 C++,修改原数组

 1 class Solution {
 2 public:
 3     /**
 4      * @param triangle: a list of lists of integers.
 5      * @return: An integer, minimum path sum.
 6      */
 7     int minimumTotal(vector<vector<int> > &triangle) {
 8         // write your code here
 9         for (int i = triangle.size() - 2; i >= 0; --i){
10           for (int j = 0; j < i + 1; ++j){
11             if(triangle[i+1][j] > triangle[i+1][j+1]){
12               triangle[i][j] += triangle[i+1][j+1];
13             }else{
14               triangle[i][j] += triangle[i+1][j];
15             }
16           }
17         }
18         return triangle[0][0];
19     }
20 };

 

LintCode: Triangle

原文:http://www.cnblogs.com/CheeseZH/p/5006838.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!