当前位置:网站首页>【动态规划】LeetCode刷题清单及思路记录
【动态规划】LeetCode刷题清单及思路记录
2022-07-30 05:47:00 【D2O】
文章目录
509 斐波那契数列
LeetCode 题目链接
动态规划的本质就是用空间换时间
这是个入门的动态规划题,状态清晰,状态转移方程明确
- 状态:dp[i] :数列的第 i 个数
- 状态转移方程:dp[i]=dp[i-1]+dp[i-2]
- 初始状态:dp[0]=0, dp[1]=1
class Solution:
def fib(self, n: int) -> int:
if n<2:
return n
else:
dp=[0]*(n+1)
dp[1]=1
for i in range(2,n+1):
dp[i]=dp[i-1]+dp[i-2]
return dp[-1]
70 爬楼梯
LeetCode 题目链接
这个题有两种思路:
朴素的思路:从状态转移入手
爬到第 i 级台阶有两种方式:
1.从第 i-1 级爬一级台阶
2.从第 i-2 级爬两级台阶
所以,定义 :
- 状态:dp[i] 为爬到第 i 级台阶的方法数
- 状态转移方程:dp[i]=dp[i-1]+dp[i-1]
- 初始状态:dp[0]=1,dp[1]=1
注:这个题和斐波那契数列很像,但注意看 dp[2]=2,即,初始状态 dp[0]=1。
class Solution:
def climbStairs(self, n: int) -> int:
dp=[1]*(n+1)
if n>1:
for i in range(2,n+1):
dp[i]=dp[i-1]+dp[i-2]
return dp[-1]
完全背包的思路:从走法入手
这个思路开始有点做应用题的意思了,重新审题,走法有两种:走一步和走两步,目的是走到第n级台阶上。
换种表达方式,即用 1 和 2 的步数加和,凑到 n 这个数,记录方法数。这不就是完全背包嘛。
直接上代码:
class Solution:
def climbStairs(self, n: int) -> int:
dp=[0]*(n+1)
nums=[1,2]
dp[0]=1
for b in range(n+1):
for num in nums:
if num<=b:
dp[b]+=dp[b-num]
return dp[-1]
746 使用最小花费爬楼梯
LeetCode 题目链接
这个题也不太费脑,题目直接给出了明确的状态定义和状态转移路径。但与前几个题目不同的是,这里记录的不再是到达第n级台阶的方法数,这里记录的是最小花费。因此,本题的难点在状态转移方程:
爬到第 i 级台阶有两种方案,其花费分别为:
1.从第 i-1 级 爬上来 其花费是 dp[i-1]+cost[i-1]
2.从第 i-2 级 爬上来 其花费是 dp[i-2]+cost[i-2]
从这两种方案中,采用花费小的那种方案,
故,状态转移方程为:
d p [ i ] = m i n ( d p [ i − 1 ] + c o s t [ i − 1 ] , d p [ i − 2 ] + c o s t [ i − 2 ] ) dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]) dp[i]=min(dp[i−1]+cost[i−1],dp[i−2]+cost[i−2])
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
n=len(cost)
dp=[0]*(n+1)
for i in range(2,n+1):
dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
return dp[n]
62 不同路径
63 不同路径Ⅱ
343 整数拆分
96 不同的二叉搜索树
(背包问题:0-1背包和完全背包)
416 分割等和子集
1049 最后一块石头的重Ⅱ
494 目标和
474 一和零
518 零钱兑换Ⅱ
377 组合总和Ⅳ
70 爬楼梯
322 零钱兑换
279 完全平方数
边栏推荐
- 爬2.12.6的Antd上传图片坑
- c语言编程练习
- 51数码管显示
- 虚拟机栈帧结构
- 租用服务器训练yolov3模型
- 高交会重要活动之一|2020中国硬件创新大赛全国总决赛
- 暂时存着阿里云
- [Punctuality Atom] Learning and use of IIC (unfinished...)
- QT serialization 1: readyRead() function, the solution to incomplete data subcontracting
- Knowledge of the day: handwritten deep copy and shallow copy (solves the problem of circular references)
猜你喜欢

This beta version of Typora is expired, please download and install a newer; workaround

jvm之逃逸分析

迷宫问题----经典回溯法解决

【markdown常用用法】
![[Jiangsu University Automation Association stm32F103c8t6] Notes [Initial 32 MCU and EXTI External Interrupt Initialization Parameter Configuration]](/img/e5/87cf293ac3d0c613864e99a8fe9a47.png)
[Jiangsu University Automation Association stm32F103c8t6] Notes [Initial 32 MCU and EXTI External Interrupt Initialization Parameter Configuration]

使用Dva项目作Antd的Demo

i++与 ++i 的区别

Duplicate keys detected:‘/da…‘

TCP建立连接的过程

Antd简单启动一个企业级项目
随机推荐
编程测试6.21
牛顿迭代法求方程的根
js advanced study notes (detailed)
Insert map data efficiently
虚拟机栈帧结构
闭包和作用域(你不知道的JS自用笔记)
多层板的层数,为啥选项都是偶数?就不能选奇数?
Simple use of xftp
Acwing Brush Questions Section 1
Kunlun On-state Screen Production (serial 1)---Contact
VSCode hides the left activity bar
QT serialization 1: readyRead() function, the solution to incomplete data subcontracting
Kunlun State Screen Production (serialization 4) --- Basics (graphical setting and display, button lights)
爬2.12.6的Antd上传图片坑
测试第二题
2020-09-03解决pip install安装非常慢[Errno 101] 网络不可达问题
OpenLayers (ol包),Vite显示地图(附源码)
单片机之流水灯
顺序二叉树---实现数组的二叉树前序遍历输出
Insertion Sort in Classic Sort