加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 云计算 > 正文

借助python代码求三角形最小路径和

发布时间:2022-07-18 12:55:37 所属栏目:云计算 来源:互联网
导读:哈喽!同学们,今天和大家分享一下,利用Python代码求三角形最小路径和!给定一个三角形,每一步只能移动到下一行中相邻的结点上,求出自顶向下的最小路径和。 例如: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自顶向下的最小路径和为 11(即:2 + 3 + 5 + 1 = 11
  哈喽!同学们,今天和大家分享一下,利用Python代码求三角形最小路径和!给定一个三角形,每一步只能移动到下一行中相邻的结点上,求出自顶向下的最小路径和。
 
  例如:
  [
 
  [2],
 
  [3,4],
 
  [6,5,7],
 
  [4,1,8,3]
 
  ]
 
  自顶向下的最小路径和为 11(即:2 + 3 + 5 + 1 = 11)。
 
  解决方案:
  首先,这是一个一维动态规划问题,动态规划一般都是从下到上走。将dp数组初始化为‘三角形’最后一行的值,然后从倒数第二层开始向上,依次更改的dp数组中元素的个数,遍历到第几层就更改dp数组前面(那一层的长度)个。以问题描述中的例子为例:
 
  初始化:[4,1,8,3]倒数第一层:[4,1,8,3]
 
  第一次:[7,6,10,3]倒数第二层:[6,5,7]
 
  第二次:[9,10,10,3]倒数第三层:[3,4]
 
  第三次:[11,10,10,3]倒数第四层:[2]
 
  
  完整代码:
  class Solution(object):
 
  def minimumTotal(triangle):
 
  # 获取triangle的长度,也就是‘三角形’的高
 
  n = len(triangle)
 
  # 初始化dp为‘三角形’最后那一行
 
  dp = triangle[-1]
 
  # 从下(倒数第二层)到上
 
  for i in range(n-2, -1, -1):
 
  # 更改dp前j个的值
 
  for j in range(i+1):
 
  dp[j] = min(dp[j], dp[j+1]) + triangle[i][j]
  
  动态规划其实存在一定的套路。当求解的问题满足以下条件时,就应该使用动态规划:主问题的可分解为很多的子问题(可以利用递归求解)并且递归求解时,很多子问题的答案会被多次重复利用。例如:斐波那契数列。

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读