LeetCode 120. Triangle
来源:互联网 发布:安卓php服务器汉化版 编辑:程序博客网 时间:2024/06/01 10:33
题目
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).
思路
这道题目要求是找出三角形中自顶向下的最小路径的和S(i)。
每一步移动的时候只能移动到下一行中的邻接点,即左下T(i+1,j)或右下 T(i+1,j+1)。
利用动态规划解决这道题目。
这道问题中的子问题是:第 i 行的最小路径和S(i),i < n ,n为三角形的行数。
状态转移方程为:S(i) = S(i-1) + min{T(i+1,j),T(i+1,j+1)}。
如果按上述步骤计算,将会产生很多重复的计算结果,并且为了计算下一行方便,使用一个中间数组sum[]来保存当前行的计算结果,然后进行下一行的计算。
从上往下计算时更新数组会比较麻烦,所以用从下往上计算的方法,直接用最后一行的值初始化sum[]。然后向上去加。这里是比较sum数组下一行中相邻两个数的大小,然后用较小的与原数组当前行的值相加。
边界值为n=0时,即三角形为空,返回0。
sum[0]就是最终的最小路径和。
代码
class Solution {public: int minimumTotal(vector<vector<int>>& triangle) { int n = triangle.size(); vector<int> sum(triangle[n-1]); if(n == 0) return 0; for(int i = n-2; i >=0 ;i--) { for(int j = 0; j < n;j++) { if(sum[j] < sum[j+1]) sum[j] += triangle[i][j]; else sum[j] = triangle[i][j] + sum[j+1]; } } return sum[0]; }};
0 0
- LeetCode 120. Triangle
- [LeetCode]120.Triangle
- [Leetcode] 120. Triangle
- [leetcode] 120.Triangle
- Leetcode 120. Triangle
- <LeetCode OJ> 120. Triangle
- 120. Triangle LeetCode
- leetcode 120. Triangle
- leetcode-120. Triangle
- LeetCode#120. Triangle
- LeetCode 120. Triangle
- [LeetCode]120. Triangle
- LeetCode *** 120. Triangle
- LeetCode-120.Triangle
- [leetcode] 120. Triangle
- [leetcode]120. Triangle
- LeetCode - 120. Triangle
- Leetcode题解 120. Triangle
- 我是一名工程师, 我真的够牛逼, 能要求人性化的管理吗?!
- HDU6029-Graph Theory-图论简单推理
- C 学习一:令牌(Tokens)、关键字
- 新版Solr中的core概念
- Spark Shuffle FetchFailedException异常
- LeetCode 120. Triangle
- Random类
- js拉动边框改变盒子大小
- (四)SMART原则
- Velocity找不到.vm文件的问题
- SDRAM和SRAM的定义与区别
- Linux使用mount挂载Windows共享文件夹
- 【nlp论文阅读】Adversal Neural Machine Translation
- MyEclipse开发Java Web 程序