代码随想录算法训练营第三十二天|509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

理论基础

动态规划是由上一个状态推断出来的,不像贪心只是每次取局部最优解,和前一次没关系

动态规划比较重要的是状态转移方程,解题的基本流程如下:

1.确定dp数组以及下标的含义

2.确定递推公式

3.dp数组如何初始化

4.确定遍历顺序

5.举例推到dp数组

509. 斐波那契数

最简单的方式就是递归

python 复制代码
class Solution:
    def fib(self, n: int) -> int:
        if n==0:
            return 0
        if n==1:
            return 1
        return self.fib(n-1)+self.fib(n-2)

下面使用动态规划,时间复杂度只要O(n)

python 复制代码
class Solution:
    def fib(self, n: int) -> int:
        if n<=1:
            return n
        dp = [0]*(n+1)
        dp[0]=0
        dp[1]=1
        for i in range(2,n+1):
            dp[i]=dp[i-1]+dp[i-2]
        return dp[n]

70. 爬楼梯

仔细分析一下,状态转移方程和菲波那切数列是一样的,因为假设我们有n个台阶,要么是从n-1上来,要么是从n上来,这两种状态的和就是现在的状态的值

python 复制代码
class Solution:
    def climbStairs(self, n: int) -> int:
        if n<=2:
            return n
        dp = [0]*(n+1)
        dp[1]=1
        dp[2]=2
        for i in range(3,n+1):
            dp[i]=dp[i-1]+dp[i-2]
        return dp[n]
        

746. 使用最小花费爬楼梯

这个 也写出来了,但是不是那么清晰

python 复制代码
class Solution:
    def minCostClimbingStairs(self, cost: List[int]) -> int:
        if len(cost)==2:
            return min(cost[0],cost[1])
        dp = [0]*(len(cost)+1)
        dp[0] = 0
        dp[1] = 0
        dp[2]=min(cost[0],cost[1])
        for i in range(3,len(cost)+1):
            dp[i] = min(dp[i-2]+cost[i-2],dp[i-1]+cost[i-1])
        return dp[len(cost)]

一个是这个dp数组的下标表示的是cost长度为i的情况下,需要的最小花费(到达第i个台阶所需要花费的最小体力)

状态转移方程dpi=min(dpi-1+costi-1,dpi-2+costi-2)

初始化的时候dp0,dp1=0

python 复制代码
class Solution:
    def minCostClimbingStairs(self, cost: List[int]) -> int:
        dp = [0]*(len(cost)+1)
        dp[0] = 0
        dp[1] = 0
        for i in range(2,len(cost)+1):
            dp[i] = min(dp[i-2]+cost[i-2],dp[i-1]+cost[i-1])
        return dp[len(cost)]
相关推荐
xys_67810 分钟前
深挖数据结构:树和二叉树(上)
数据结构·算法
Interview Aid11233 分钟前
Google SWE Intern VO 面经:两轮 Coding,Follow-up 考察 BFS 状态
算法
琳达爱分享1 小时前
从单机令牌桶到集群限流:一次配额超发的复盘
后端·算法
range1 小时前
带TTL的LRU缓存的实现-字节手撕-26/10/19
算法
糖果豆豆1 小时前
n log n 到底从哪来?排序下界、2-SAT 与 3-SAT、停机问题,卡的是同一件事
算法·架构
地平线开发者1 小时前
【玩转 征程6 算法工具链:PTQ 工具篇】hb_verifier
算法·自动驾驶
171320330计算机毕设编程1 小时前
计算机毕业设计 基于springboot+vue的在线观鸟视频播放网站 LW PPT
java·大数据·vue.js·spring boot·算法·课程设计
himobrinehacken2 小时前
位运算揭秘:左右移与符号位陷阱
c语言·c++·算法·安全
INGNIGHT2 小时前
815 · 课程表IV(dfs)
算法·深度优先
Pniubi3 小时前
力扣146.LRU缓存机制
算法·leetcode·缓存