120. Triangle
2016-07-26 20:59
337 查看
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
The minimum path sum from top to bottom is
11).
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
vector<int> dp(triangle[triangle.size()-1].size(), 0);
if (triangle.size() == 0) return 0;
dp[0] = triangle[0][0];
for (int i = 1; i < triangle.size(); i++){
for (int j = triangle[i].size() - 1; j >= 0; j--){
if (j == triangle[i].size() - 1){
dp[j] = dp[j - 1] + triangle[i][j];
}
else if (j == 0){
dp[j] = dp[j] += triangle[i][j];
}
else{
dp[j] = min(dp[j], dp[j - 1]) + triangle[i][j];
}
}
}
int res = INT_MAX;
for (int n : dp){
if (n < res){
res = n;
}
}
return res;
}
};
当然如果允许改动triangle数组里面的值可以,从下往上递推。O(1)的空间复杂度。如:
http://blog.csdn.net/ebowtang/article/details/50687182
For example, given the following triangle
[ [2], [3,4], [6,5,7], [4,1,8,3] ]
The minimum path sum from top to bottom is
11(i.e., 2 + 3 + 5 + 1 =
11).
class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
vector<int> dp(triangle[triangle.size()-1].size(), 0);
if (triangle.size() == 0) return 0;
dp[0] = triangle[0][0];
for (int i = 1; i < triangle.size(); i++){
for (int j = triangle[i].size() - 1; j >= 0; j--){
if (j == triangle[i].size() - 1){
dp[j] = dp[j - 1] + triangle[i][j];
}
else if (j == 0){
dp[j] = dp[j] += triangle[i][j];
}
else{
dp[j] = min(dp[j], dp[j - 1]) + triangle[i][j];
}
}
}
int res = INT_MAX;
for (int n : dp){
if (n < res){
res = n;
}
}
return res;
}
};
当然如果允许改动triangle数组里面的值可以,从下往上递推。O(1)的空间复杂度。如:
http://blog.csdn.net/ebowtang/article/details/50687182
相关文章推荐
- LEETCode 264. Ugly Number II
- jquery的get,post和ajax方法的使用
- Session和Cookie的区别
- 对map集合进行排序
- HorizontalListView实现setSelection
- Codeforces 534C Polycarpus' Dice(思路)
- Leetcode no. 149
- JVM调优总结
- 搭建kafka集群
- scanf 用法及陷阱
- WebService基础学习(二)—三要素
- CSS盒子模型
- 【Python】map、filter、reduce函数简介
- 面试题53:正则表达式匹配
- HDOJ-----2199二分
- JavaWEB入门
- android ANR分析
- 读书笔记(一)_VC++深入详解
- 程序断点与数据断点
- CSS选择器