题目:

给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。

样例

比如,给出下列数字三角形:

[

     [2],

    [3,4],

   [6,5,7],

  [4,1,8,3]

]

从顶到底部的最小路径和为11 ( 2 + 3 + 5 + 1 = 11)。

注意

如果你只用额外空间复杂度O(n)的条件下完成可以获得加分,其中n是数字三角形的总行数

解题:

求出从顶点到底部所有节点的路径,在选取最小的路径和.这里给的是下三角矩阵,A[i][j] += Max{A[i-1][j-1],A[i-1][j]},对应两个边界的情况:A[i][j] += A[i-1][j]、A[i][j] +=A[i-1][j-1],这样从上向下,在求到最底部时候,找出最小的值。

Java程序:

public class Solution {
/**
* @param triangle: a list of lists of integers.
* @return: An integer, minimum path sum.
*/
public int minimumTotal(int[][] triangle) {
// write your code here
if(triangle.length==1&&triangle[0].length==1)
return triangle[0][0];
int minnum = Integer.MAX_VALUE; for(int i=1;i<triangle.length;i++){
for(int j=0;j<triangle[i].length;j++){
if(j==0){
triangle[i][j]+=triangle[i-1][j];
}else if(j==triangle[i].length-1){
triangle[i][j]+=triangle[i-1][j-1];
}else{
triangle[i][j]+=Math.min(triangle[i-1][j],triangle[i-1][j-1]);
}
if(i==triangle.length-1)
minnum = Math.min(minnum,triangle[i][j]);
}
}
return minnum;
}
}
总耗时: 2318 ms

Python程序:

class Solution:
"""
@param triangle: a list of lists of integers.
@return: An integer, minimum path sum.
"""
def minimumTotal(self, triangle):
# write your code here if triangle==None:
return 0
if len(triangle)==1 and len(triangle[0])==1:
return triangle[0][0]
minnum = 0
m = len(triangle)
for i in range(1,m):
for j in range(0,len(triangle[i])):
if j==0:
triangle[i][j] += triangle[i-1][j]
elif j==len(triangle[i])-1:
triangle[i][j] += triangle[i-1][j-1]
else:
triangle[i][j] += min(triangle[i-1][j-1],triangle[i-1][j])
if i==len(triangle) - 1 and j==0:
minnum = triangle[i][j]
else:
minnum = min(minnum,triangle[i][j])
return minnum

总耗时: 414 ms

上面是自顶向下的,能否可以自底向上进行,,竟然也可以,这里还不要考虑两个边界的情况,当然上面的其实也可以不考虑的,可以认为是0,这里:triangle[i][j] +=min(triangle[i+1][j] , triangle[i+1][j+1])

Java程序:

public class Solution {
/**
* @param triangle: a list of lists of integers.
* @return: An integer, minimum path sum.
*/
public int minimumTotal(int[][] triangle) {
// write your code here
if(triangle.length==1&&triangle[0].length==1)
return triangle[0][0];
int minnum = Integer.MAX_VALUE;
for(int i=triangle.length-2;i>=0;i--){
for(int j=0;j<triangle[i].length;j++){
triangle[i][j] += Math.min(triangle[i+1][j],triangle[i+1][j+1]);
}
}
minnum = triangle[0][0];
return minnum;
}
}

总耗时: 1384 ms

运行时间也少了好多的

Python程序:

class Solution:
"""
@param triangle: a list of lists of integers.
@return: An integer, minimum path sum.
"""
def minimumTotal(self, triangle):
# write your code here if triangle==None:
return 0
if len(triangle)==1 and len(triangle[0])==1:
return triangle[0][0]
minnum = 0
m = len(triangle)
for i in range(m-2,-1,-1):
for j in range(0,len(triangle[i])):
triangle[i][j] +=min(triangle[i+1][j] , triangle[i+1][j+1])
minnum = triangle[0][0]
return minnum

总耗时: 439 ms

lintcode:数字三角形的更多相关文章

  1. G:数字三角形

    总时间限制: 1000ms 内存限制: 65536kB描述73   88   1   02   7   4   44   5   2   6   5 (图1) 图1给出了一个数字三角形.从三角形的顶部 ...

  2. 4829 [DP]数字三角形升级版

    4829 [DP]数字三角形升级版  时间限制: 1 s  空间限制: 16000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 从数字三角形的顶部(如图, ...

  3. 【递归】数字三角形 简单dp

    [递归]数字三角形 题目描述 对于大多数人来说,“我们是这么的正常,因此也就这么的平庸.”而天才总是与众不同的,所以当邪狼问修罗王:“老大,你蹲在那儿一动不动看了有半个小时了,蚂蚁有那么好看吗?” 修 ...

  4. hihocoder 1037 数字三角形

    #1037 : 数字三角形 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 问题描述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他们来到了大洋彼岸 ...

  5. 1989-C. 数字三角形

    描述 如图所示,是一个数字搭成的三角形. 若起始位置在三角形的顶端,结束位置在三角形底边,每一步只能向下方或向右下角移动一格.请编程计算一条路径,使得路径上经过的数字和最大.(图中路径7→3→8→7→ ...

  6. 洛谷P1118 数字三角形游戏

    洛谷1118 数字三角形游戏 题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直 ...

  7. HDU 1176 免费馅饼(数字三角形)

    免费馅饼 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉 ...

  8. [CODEVS1220]数字三角形

    题目描述 Description 如图所示的数字三角形,从顶部出发,在每一结点可以选择向左走或得向右走,一直走到底层,要求找出一条路径,使路径上的值最大. 输入描述 Input Description ...

  9. 嘟!数字三角形 W WW WWW集合!

    哔!数字三角形全体集合! 数字三角形!到! 数字三角形W!到! 数字三角形WW!到! 数字三角形WWW!到! --------------------------------------------- ...

随机推荐

  1. mongodb持久化

    先上一张图(根据此处重画),看完下面的内容应该可以理解. mongodb使用内存映射的方式来访问和修改数据库文件,内存由操作系统来管理.开启journal的情况,数据文件映射到内存2个view:pri ...

  2. js Table冻结表头示例代码

    Table冻结表头的js实现代码. Table冻结表头: <script type="text/javascript"> //冻结table的表头  function  ...

  3. PHP版本中的VC6,VC9,VC11,TS,NTS区别

    以windows为例,看看下载到得php zip的文件名 php-5.4.4-nts-Win32-VC9-x86.zip VC6:legacy Visual Studio 6 compiler,是使用 ...

  4. 在HTML中通过jQuery设置列表项符号

    在创建列表的时候,可以通过指定type来设置列表项的符号,如下所示: <body> <form id="form1" runat="server&quo ...

  5. Java中构造函数执行顺序的问题

    1,  先执行内部静态对象的构造函数,如果有多个按定义的先后顺序执行:而且静态类的构造函数只会被执行一次,只在其第一个对象创建时调用,即便是创建了同一个类的多个对象,例如main()函数里b1,b2创 ...

  6. JAVA中toString方法

    因为它是Object里面已经有了的方法,而所有类都是继承Object,所以"所有对象都有这个方法". 它通常只是为了方便输出,比如System.out.println(xx),括号 ...

  7. 【ajax跨域】原因原理解决

    1.安全,跨域cookie iframe 2.很简单,就是利用<script>标签没有跨域限制的“漏洞”(历史遗迹啊)来达到与第三方通讯的目的.当需要通讯时,本站脚本创建一个<scr ...

  8. lnmp停用nginx,改用apache

    编译安装的lnmp环境 总是出现502错误,修改了各种配置也没用,暂时先放弃nginx,改用apache apache使用yum安装方式 需要注意的事项,将网站根目录的用户组改为 chown apac ...

  9. 你用什么方法检查 PHP 脚本的执行效率(通常是脚本执行时间)和数据库 SQL 的效率(通常是数据库 Query 时间), 并定位和分析脚本执行和数据库查询的瓶颈所在?

    php: 一般是在你要检查的代码开头记录一个时间,结尾记录一个时间.取差值, 数据库SQL的效率    sql的explain(mysql),启用slow query log记录慢查询.   通常还要 ...

  10. 两行代码搞定UITableView无数据无网络显示-b

    不知是否有像我一样的,每次写TableView在监听网络和无数据源时逻辑处理提示视图都是一堆代码,很繁琐也很重复的垃圾代码(可能就只有我这样