当前位置:网站首页>动态规划相关:三角形最小路径和
动态规划相关:三角形最小路径和
2022-08-09 15:04:00 【凤求凰的博客】
文章目录
一、爬楼梯
1、自顶向下
memo = {
1:1, 2:2}
class Solution:
def climbStairs(self, n: int) -> int:
# dp 自顶向下 -> 记忆化递归
if n not in memo:
memo[n] = self.climbStairs(n - 1) + self.climbStairs(n - 2)
return memo[n]
2、自底向上
class Solution:
def climbStairs(self, n: int) -> int:
# dp 自底向上
if n == 1: return 1
dp = [0 for _ in range(n+1)]
dp[1] = 1
dp[2] = 2
for i in range(3, n + 1):
# dp列表你可以认为它主要用途,是为了得到最后结果,用来存储中间结果
dp[i] = dp[i-1]+dp[i-2] # 递推公式,或叫dp方程、状态转移方程
return dp[n]
下面我们来 优化内存,上面用了列表!其目的是为了得到最后结果,用来存储中间结果
,其实本题而言我们暂存dp[i-1]、dp[i-2]两个值即可,不断向后迭代更新这两个值!
class Solution:
def climbStairs(self, n: int) -> int:
# dp 自底向下:本质循环--即迭代法
if n <= 3: return n
a, b = 2, 3 # 计算我们从第四阶计算走即可!四阶前面都是ret n
for _ in range(n-3):
a, b = b, a + b
return b
二、三角形最小路径和
1、自顶向下
class Solution:
def minimumTotal(self, triangle: List[List[int]]) -> int:
# dp 自顶向下
dp = [[0 for _ in range(i+1)] for i in range(len(triangle))]
def dfs(i,j):
if i >= len(triangle):
return 0
if not dp[i][j]:
sub1 = dfs(i+1,j)
sub2 = dfs(i+1,j+1)
dp[i][j] = min(sub1, sub2)+triangle[i][j]
return dp[i][j]
return dfs(0,0)
2、自底向上
class Solution:
def minimumTotal(self, triangle: List[List[int]]) -> int:
dp = triangle
# 最后一排不用遍历,且索引等于长度-1,所以len(triangle) - 2
for i in range(len(triangle) - 2, -1, -1):
for j in range(len(triangle[i])):
dp[i][j] += min(dp[i+1][j],dp[i+1][j+1])
return dp[0][0]
四、编辑距离
1、自顶向下
2、自底向上
五、最长有效括号
1、自顶向下
2、自底向上
六、最小路径和
1、自顶向下
2、自底向上
七、解码方法
1、自顶向下
2、自底向上
八、最大正方形
1、自顶向下
2、自底向上
九、矩形区域不超过K的最大数值和
1、自顶向下
2、自底向上
十、青蛙过河
1、自顶向下
2、自底向上
十一、分割数组的最大值
1、自顶向下
2、自底向上
十二、学生出勤记录II
1、自顶向下
2、自底向上
十三、任务调度器
1、自顶向下
2、自底向上
十四、戳气球
1、自顶向下
2、自底向上
边栏推荐
- 2022.7.16学习总结
- C语言知识细节点(二)
- MATLAB Solution to Planning Problems - MATLAB in Mathematical Modeling (2nd Edition)
- SVM Support Vector Machine - Application of MATLAB in Mathematical Modeling
- 面试经历(华为,瑞晟,大华,海康,虹软,顺丰)
- MySQL必知必会(二)
- js中的Date对象 及 将时间戳转换为yy-mm-dd hh:mm:ss格式的方法
- FileInputStream与BufferedInputStream的区别
- webSocket的实现
- Unity Shader零基础入门1:纯色物体
猜你喜欢
随机推荐
输入不定长数组,输入一个字符串,既包含字符,又包含数字,输出数组,输入一个二维数组,字符和数字都可
Janus介绍
typescript学习(二)
WinServer 2019 组策略删除本地管理员且只允许域用户登陆
保存数据
三栏布局:左右固定宽,中间自适应的几种方式
Tracert 命令穿越防火墙不显示星号*的方法
ARM基础知识点笔记
Mysql学习(四)
Matlab做分布拟合及绘制频率分布直方图
【QT】窗口几何布局学习
MySQL必知必会(一)
Heap series _0x03: heap block + malloc/new bottom layer + LFH (WinDbg analysis)
缓存层与数据库层数据同步问题
架构实战营第九模块作业-毕业项目
RTP协议封装音视频媒体数据详解
类定义中class和className中间的修饰词的作用有关问题
新电脑自带win11,开机怎样跳过连网
微信小程序学习(二)
MATLAB Solution to Planning Problems - MATLAB in Mathematical Modeling (2nd Edition)