Triangle --找三角形数组中最小的路径(重重重)
来源:互联网 发布:coc狂暴升级数据 编辑:程序博客网 时间:2024/05/16 08:55
题目:
链接
解答:
方法一: 深搜 超时。
试图剪枝,当加和大于最小值时,剪枝,这样是不对的,因为后面的数有可能是负数。
代码:
class Solution {public:int minimumTotal(vector<vector<int> > &triangle) {int min = INT_MAX;int sum = 0;search(sum, 0, 0, triangle, min);return min;}void search(int sum, int i, int row, vector<vector<int> > &triangle, int &min){if (row == triangle.size()){if (sum < min){min = sum;}}else{int temp = sum + triangle[row][i];search(temp, i, row + 1, triangle, min);if (i + 1 < triangle[row].size()){temp = sum + triangle[row][i + 1];search(temp, i + 1, row + 1, triangle, min);}}}};
解答二:
动态规划:
转移方式: 下一行某个数和的最小值等于该数加上上一行两个数中比较小的那个数。
[ [2], [3,4], [6,5,7], [4,1,8,3]]
例如: 最后一行第二个位置的sum[3][1]的最小值应该等于a[3][1]加上上一行中a[2][0]和a[2][1]和中的最小值。
代码:
class Solution {public:int minimumTotal(vector<vector<int> > &triangle) {int min = INT_MAX;int sum[200][200];sum[0][0] = triangle[0][0];for (int i = 1; i < triangle.size(); i++){for (int j = 0; j < triangle[i].size(); j++){if (j == 0)sum[i][j] = sum[i - 1][j] + triangle[i][j];else if (j == triangle[i].size()-1)sum[i][j] = sum[i - 1][j - 1] + triangle[i][j];else{sum[i][j] = (sum[i - 1][j] < sum[i - 1][j - 1] ? sum[i - 1][j] : sum[i - 1][j - 1]) + triangle[i][j];}}}for (int i = 0; i < triangle[triangle.size() - 1].size(); i++){if (sum[triangle.size() - 1][i] < min)min = sum[triangle.size() - 1][i];}return min;}};
0 0
- Triangle --找三角形数组中最小的路径(重重重)
- Triangle三角形的最小路径和
- LeetCode-120:Triangle (三角形列表的最小路径和) -- medium
- Triangle 三角形求最小路径和 @LeetCode
- Triangle 三角形求最小路径和 @leetcode
- Leetcode 120 Triangle 三角形最小路径和
- triangle- 求从顶向下的三角形的最小路径和问题
- leetcode之Triangle(三角形的最短路径)
- LeetCode | Triangle(三角形路径和)
- 找数组中最小的k个元素
- leetcode 找旋转数组中最小的数
- 在旋转数组中找最小的值
- Word Break (重重重)
- Permutations II (重重重)
- Triangle 三角形从顶到底的最短路径
- HDU 3548 Enumerate the Triangles(找周长最小的三角形)
- HDU 3548 Enumerate the Triangles(找周长最小的三角形+优化)
- 最小路径和—Triangle
- iOS 面试题(十二)
- hdu 4940 Destroy Transportation system(sap dfs)
- win7 下ffmpeg release 版本崩溃问题
- protocol Buffer
- Lucky Number
- Triangle --找三角形数组中最小的路径(重重重)
- oracle的mybatis批量插入(转)
- python regular expression basic
- java基础复习(3)
- const int *p,const * int p,int const *p
- 越狱开发相关
- ArcSDE:C#打开SDE数据库的几种方式总结
- 判断两个线段是否相交
- Windows进程通信之内存映射文件