【代码随想录|第九章 动态规划part01 509.斐波那契数 70.爬楼梯 746.使用最小花费爬楼梯】

代码随想录|第九章 动态规划part01 509.斐波那契数 70.爬楼梯 746.使用最小花费爬楼梯


python

一、理论基础

1.动态规划结题步骤

1 确定dp数组(dp table)以及下标的含义
2 确定递推公式
3 dp数组如何初始化
4 确定遍历顺序
5 举例推导dp数组

一、509.斐波那契数

509.斐波那契数

1.代码

代码如下(示例):

class Solution:
    def fib(self,n):
        if n==0:
            return 0
        if n==1:
            return 1
        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]

if __name__=="__main__":
    n=int(input())
    solution=Solution()
    result=solution.fib(n)
    print(result)

n=0的特殊情况的问题,如果没有n==0,则在n=0情况下,range(2,1)代码有问题

二、70.爬楼梯

70.爬楼梯
没思路,感觉有难度

关键点:明确dp的含义:是方法数目
明确传递的关系,即dp[i]和dp[i-1]及之前的关系,翻译到含义是第i阶梯的方法怎么由第i-1或之前的阶梯的方法数目推的,明确了这个后面才能有思路

1.代码

代码如下(示例):

class Solution:
    def climbStairs(self,n):
        if n==1:
            return 1

        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]


if __name__=="__main__":
    n=int(input())
    solution=Solution()
    result=solution.climbStairs(n)
    print(result)

掌握了思想后,代码没有什么难度的。

注意边界条件,n+1,注意range的起始条件

三、746.使用最小花费爬楼梯

746.使用最小花费爬楼梯
大体dp思路有了,但是初始条件,和限制条件仍然没有掌握

1.代码

代码如下(示例):

class Solution:
    def minCostClimbingStairs(self,cost):
        n=len(cost)
        dp = [0]*(n+1)
        if n==0:
            dp[0]=0
            return
        dp[1]=0
        dp[2]=min(cost[0],cost[1])
        for i in range(2,n+1):
            dp[i]=min(cost[i-1]+dp[i-1],cost[i-2]+dp[i-2])
        return dp[n]

if __name__=="__main__":
    cost = list(map(int,input().strip().split(",")))
    solution=Solution()
    result=solution.minCostClimbingStairs(cost)
    print(result)


注意点1:dp[0]和dp[1]注意是0
注意点2:dp的维度,注意是n+1
注意点2:最后一个台阶要再爬一个到顶楼

总结

输入输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值