您的位置:首页 > 其它

LeetCode OJ:Triangle(三角形)

2015-10-22 19:36 309 查看
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]
]

一开始的题目的意思理解错了 ,以为是位数相差一就是临近的意思,但实际上这里意思是图形上面的那种临近,和原来那个实际上是不一样的。用到了dfs,我一开始还想用一个min的二位vector来保存结果

但是实际上不用,直接用原来的triangle数组就可以保存结果了:

class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
if(triangle.size() == 0 || triangle[0].size() == 0)
return 0;
//vector<vector<int>>minRet(triangle.size(), vector<int>(triangle[0].size(), 0));
for(int i = 1; i < triangle.size(); ++i){   // i从1开始
for(int j = 0; j < triangle[i].size(); ++j){
if(j == 0){
triangle[i][j] += triangle[i - 1][0];
}else if(j == triangle[i].size() - 1){
triangle[i][j] += triangle[i - 1][j - 1];
}else{
triangle[i][j] += min(triangle[i - 1][j - 1], triangle[i - 1][j]);
}
}
}
int horSz = triangle.size();
int sz = triangle[horSz - 1].size();
int ret = triangle[horSz - 1][0];
for(int i = 1; i < sz; ++i){
if(ret > triangle[horSz - 1][i])
ret = triangle[horSz - 1][i];
}
return ret;
}
};


这个题用java写还是略坑爹,各种get,add写起来感觉好麻烦,暂时就不写了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: