题目:

Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.

示例:

[[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).
Note:
Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.

题目解析:

1.此题是等腰三角形,上下之间的关系简化为上下相邻的三个数,index相邻,大小关系是在下方二选一+上方的数值,必然正确。 根据此思路,可以top-bottom,或者bottom-top,由于可以简化,所以动态规划方法。
2. 采用bottom-top方法,最后简化为1个值,所以左侧值放置两值中的小值。

代码:


普通代码,较慢:
class Solution_:def minimumTotal(self, triangle):""":type triangle: List[List[int]]:rtype: int"""all_paths=[]cur_path=[triangle[0][0]]# cur_path=[]cur_index=[0,0]self.bfs(all_paths,cur_path,cur_index,triangle)print(all_paths)sums=[sum(elem) for elem in all_paths]return min(sums)def bfs(self,all_paths,cur_path,cur_index,triangle):x_cur=cur_index[0]# cur_row=triangle[x_cur]x_threshold=len(triangle)y_cur=cur_index[1]x_next=x_cur+1y_next=[]if x_next<x_threshold:next_row = triangle[x_cur + 1]y_threshold = len(next_row)# y_next.append(y_cur)# if y_cur-1>=0:y_next.append(y_cur)if y_cur+1<y_threshold:y_next.append(y_cur+1)for elem in y_next:cur_path_pre=cur_path+[triangle[x_next][elem]]self.bfs(all_paths,cur_path_pre,[x_next,elem],triangle)else:all_paths.append(cur_path)
动态规划,简练:
class Solution(object):def minimumTotal(self, triangle):dp=triangle[-1][:]# print(dp)for i in  range(len(triangle)-2,-1,-1):for j in range(i+1):# print(i,j)dp[j]=min(dp[j],dp[j+1])+triangle[i][j]# dp=dp[:i+1]return dp[0]

leetcode-120-Triangle-等腰三角形相关推荐

  1. 【DP】LeetCode 120. Triangle

    LeetCode 120. Triangle Solution1:我的答案 真费劲啊!!! 啊!!!!!! class Solution { public:int minimumTotal(vecto ...

  2. 动态规划应用--“杨辉三角”最短路径 LeetCode 120

    文章目录 1. 问题描述 2. DP算法代码 3. LeetCode 120 三角形最小路径和 1. 问题描述 对"杨辉三角"进行一些改造.每个位置的数字可以随意填写,经过某个数字 ...

  3. [LeetCode 120] - 三角形(Triangle)

    问题 给出一个三角形,找出从顶部至底部的最小路径和.每一步你只能移动到下一行的邻接数字. 例如,给出如下三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 从顶部至底部的最 ...

  4. leetcode @python 120. Triangle

    题目链接 https://leetcode.com/problems/triangle/ 题目原文 Given a triangle, find the minimum path sum from t ...

  5. leetcode - 120. 三角形最小路径和

    120. 三角形最小路径和 ------------------------------------------ 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如 ...

  6. Leetcode 120. 三角形最小路径和 解题思路及C++实现

    解题思路: 这是一个典型的动态规划问题,定义一个数组  dp,dp[i] (tmp[i]也是)表示到达当前行第 i 个元素的最小路径和. 所以只需要定义一个1维数组dp(n, 0),每循环遍历第 i ...

  7. Leetcode 120. 三角形最小路径和 (每日一题 20210927)

    给定一个三角形 triangle ,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上.相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点 ...

  8. 120. Triangle 三角形最小路径和

    Title 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点. 例 ...

  9. 120. Triangle

    文章目录 1 题目理解 2 解题 2.1 动态规划 2.2 优化空间 2.3进一步优化空间 1 题目理解 Given a triangle array, return the minimum path ...

  10. LeetCode 120. 三角形最小路径和

    思路: 从下(倒数第二行)往上开始计算,找到最先和之后,每一行的值重新赋值,直到最顶层就是最小值了. public int minimumTotal(List<List<Integer&g ...

最新文章

  1. PHP获取地址栏信息
  2. linux7双网卡设置,Centos 7 静态IP和双网卡配置
  3. 3.1.6 基本分页存储管理的基本概念
  4. For与Function进阶实战、Lazy的使用笔记总结
  5. Oracle数据库学习(一)安装和简单使用
  6. 在c语言中预处理命令行都以井号开头,以井号开头的行和gcc预处理器输出中的'#1“ac”'之类的数字是什么意思?...
  7. 支援日本/厄瓜多尔震区 Skype推免费通话
  8. OpenShift 4 - Pod的亲和性/反亲和性
  9. Spark成为大数据高手进阶步骤
  10. 为什么哈希表的容量一定要是 2的整数次幂?
  11. 苹果手机说明书_知科技新鲜事 | 华为Mate40系列手机壳曝光:3.5mm耳机孔
  12. 几何学五大公理_【欧几里德的平面几何五大公理是什么?】作业帮
  13. 超市管理系统java代码_java实现简单超市管理系统
  14. 联想新计算机开机黑屏,联想笔记本电脑开机黑屏没反应的原因及解决办法攻略【维修总结】...
  15. Linux网络设备驱动程序设计----刘文涛
  16. 耐摔 8寸 android,屏幕耐摔的手机有哪些?6款屏幕耐摔的手机推荐
  17. charles软件关闭后浏览器无法上网的问题
  18. jetson nano 5 运行YOLOV5
  19. 停车位检测方法研究综述
  20. python基础知识验证哥德巴赫猜想

热门文章

  1. ibm watson_IBM Watson Assistant与Web聊天的集成
  2. php ajax可编辑表格,jquerAjax+php实现表格的增删改查(带数据库)
  3. thinkphp开启子域名无法正常访问_内网穿透之动态域名解析_DDNS(二)
  4. 错误empty character constant的解决办法
  5. Linux后台启动脚本
  6. 为何HDFS是大数据分析的软肋
  7. [收藏】正确使用SqlConnection对象,兼谈数据库连接池
  8. 我的博客也是男的(还好)
  9. 《MySQL必知必会》学习笔记——第五章(排序检索数据)
  10. linux 去掉csv文件第一行,使用PowerShell删除文本文件的第一行