Leetcode Triangle
2015-12-30 15:53
246 查看
/* 意思就是: 给定一个三角形。求得和最小的路径。每层仅仅能选一个整数,上一层和下一层的整数必须是相邻的。 思路: 1,动态规划。到第i层的第k个顶点的最小路径长度表示为f(i,k)。则f(i, k) = min{f(i-1,k), f(i-1,k-1)} + d(i, k); 当中d(i, k)表示原来三角形数组里 的第i行第k列的元素。则能够求得从第一行到终于到第length-1行第k个元素的最小路径长度。最后再比較第length-1行中全部元素的路径长度大小。求得最小值。 2,本题主要关心的是空间复杂度不要超过n。 3,注意边界条件——每一行中的第一和最后一个元素在上一行中仅仅有一个邻居。 而其它中间的元素在上一行中都有两个相邻元素。 演示样例: 初始 triangle [ [2], [3,4], [6,5,7], [4,1,8,3] ] 程序执行之后的triangle [ [2], [5,6], [11,10,13], [15,11,18,16] ] */ class Solution { public: int minimumTotal(vector<vector<int> > &triangle) { int size = triangle.size(); if(size == 0){ return 0; } int i = 0; int j = 0; int innerSize = 0; int minPath = 0x7FFFFFFF; for(i = 1; i < size; i++){ innerSize = triangle[i].size(); for(j = 0; j < innerSize; j++){ if(j == 0){ triangle[i][0] += triangle[i-1][0]; } else if(j == innerSize - 1){ triangle[i][innerSize - 1] += triangle[i -1][innerSize - 2]; } else { triangle[i][j] += min(triangle[i - 1][j-1], triangle[i - 1][j]); } } } innerSize = triangle[size - 1].size(); for(j = 0; j < innerSize; j++){ if(triangle[size -1][j] < minPath){ minPath = triangle[size -1][j]; } } return minPath; } };
相关文章推荐
- 微信公众号接收消息和发送消息开发流程和注意事项
- cxf 框架 webservice
- hibernate,createCriteria in条件 是一个集合。list 或 数组等
- jeecg关闭当前iframe
- c#中 字节数组到浮点型转换
- 继续开写博客
- [转]从零认识tomcat,构建一机多实例tomcat集群
- Android下修改SeekBar样式
- JMeter学习(二)录制脚本
- Android之JavaSe基础--面向对象高级部分(六)
- 69.NSURLSession(音乐下载保存代码演示)
- Struts2的零配置和rest插件
- java 获得当前时间 年月日时分秒 星期几
- windows下安装Apache2.4.16和php5.6.13
- (原创)node.js入门之二:mysql的使用-Mac环境开发
- linux telnet ip 11211不成功
- 用DexClassLoader实现加壳
- 面试题34:最小的K个数
- 同步post发送微博
- C++顺序表(殷人昆版)