leetcode--Triangle
来源:互联网 发布:淘宝网什么最好卖 编辑:程序博客网 时间:2024/06/14 15:02
1.问题
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]]
The minimum path sum from top to bottom is 11
(i.e., 2 + 3 + 5 + 1 = 11).
Note:
Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.
2.1从上往下动态规划,状态转移方程为:
f(i,j) = min{f(i-1,j),f(i-1,j-1)} + (i,j);
class Solution {public: int minimumTotal(vector<vector<int>>& triangle) { int total=INT_MAX; int n = triangle.size(); for(int i=1;i<n;++i) { int s = triangle[i].size(); triangle[i][0] = triangle[i-1][0]+triangle[i][0]; triangle[i][s-1] = triangle[i-1][s-2]+triangle[i][s-1]; for(int j=1;j<s-1;++j) { triangle[i][j] = min(triangle[i-1][j-1],triangle[i-1][j]) + triangle[i][j]; } } for(int i=0;i<n;++i) { total = min(total,triangle[n-1][i]); } return total; }};
f(i,j)=min{f(i,j+1),f(i+1,j+1)}+(i,j)
// 时间复杂度O(n^2),空间复杂度O(1)class Solution {public: int minimumTotal (vector<vector<int>>& triangle) { for (int i = triangle.size() - 2; i >= 0; --i) for (int j = 0; j < i + 1; ++j) triangle[i][j] += min(triangle[i + 1][j], triangle[i + 1][j + 1]); return triangle [0][0]; }};
0 0
- LeetCode : Triangle
- [LeetCode] Triangle
- [Leetcode] Triangle
- [LeetCode] Triangle
- 【leetcode】Triangle
- LeetCode - Triangle
- [LeetCode]Triangle
- [Leetcode]Triangle
- [leetcode]Triangle
- Leetcode: Triangle
- [LeetCode] Triangle
- LeetCode-Triangle
- [leetcode] Triangle
- [LeetCode] Triangle
- LeetCode - Triangle
- 【Leetcode】Triangle
- LeetCode | Triangle
- [leetcode]Triangle
- 【构】使用行为树(Behavior Tree)实现游戏AI
- 每日一vim(9)缩进
- 做一个怎样的子女
- 常用网址
- 一切都会过去,而逝去的终将变的美好
- leetcode--Triangle
- UICollectionView基础
- 数字溢出的那点事儿
- 看完这些感觉心好累,不会再爱了…
- 如何取消firefox地址栏的自动补全/自动提示功能
- angularjs指令定义中的require参数
- urlwrite.xml
- fastJson API
- Oracle 拆分字符串函数