120 Triangle

# 120 Triangle

题目来源:

https://leetcode.com/problems/triangle/description/

题意分析:

给定一个三角形,找到一条使经过数值之和最小的从顶到下的路径,每次只能移动到下一层相邻的结点。题目要求只能使用O(n)的额外空间,n为三角形行数。

栗子:

 

题目思路:

经典的动态规划问题,先不管空间问题,创建一个类似的三角形res_triangle,每个位置都记录从顶到达该位置的最小花费。跟上一题类似,写出动态转移方程:

Res_triangle[row][col]=res_triangle[row-1][col]+triangle[row][col]   if col==0

=res_triangle[row-1][col-1]+triangle[row][col]  if col==row

=18.min(res_triangle[row-1][col-1]+triangle[row][col],res_triangle[row-1][col]+triangle[row][col])  if other

初始化Res_triangle[row][col]=triangle[0][0].

 

结果就过了。Leetcode对空间的要求没有题目要求的严格嘛。去DIscuss看到了一种自底向上的解法,空间达到了题目的要求,觉得被题目中的from top to bottom迷惑了。

 

 

代码:

1. class Solution:  

2.     def minimumTotal(self, triangle):  

3.         """ 

4.         :type triangle: List[List[int]] 

5.         :rtype: int 

6.         """  

7.         res_triangle=[[]]*len(triangle)  

8.         for row in range(0,len(triangle)):  

9.             res_triangle[row]=triangle[row][:]  

10.           

11.         for row in range(1,len(triangle)):  

12.             for col in range(0,row+1):  

13.                 if col==0:  

14.                     res_triangle[row][col]=res_triangle[row-1][col]+triangle[row][col]  

15.                 elif col==row:  

16.                     res_triangle[row][col]=res_triangle[row-1][col-1]+triangle[row][col]  

17.                 else:  

18.                     res_triangle[row][col]=min(res_triangle[row-1][col-1]+triangle[row][col],res_triangle[row-1][col]+triangle[row][col])  

19.           

20.         return min(res_triangle[len(triangle)-1])  

21.               

 

提交细节:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值