算法随想录第三十八天打卡| 理论基础 , 509. 斐波那契数, 70. 爬楼梯 , 746. 使用最小花费爬楼梯

 理论基础 

无论大家之前对动态规划学到什么程度,一定要先看 我讲的 动态规划理论基础。 

如果没做过动态规划的题目,看我讲的理论基础,会有感觉 是不是简单题想复杂了? 

其实并没有,我讲的理论基础内容,在动规章节所有题目都有运用,所以很重要!  

如果做过动态规划题目的录友,看我的理论基础 就会感同身受了。

代码随想录

视频:从此再也不怕动态规划了,动态规划解题方法论大曝光 !| 理论基础 |力扣刷题总结| 动态规划入门_哔哩哔哩_bilibili

 509. 斐波那契数

很简单的动规入门题,但简单题使用来掌握方法论的,还是要有动规五部曲来分析。

代码随想录

视频:手把手带你入门动态规划 | LeetCode:509.斐波那契数_哔哩哔哩_bilibili

class Solution(object):
    def fib(self, n):
        if n==0 :
            return 0
        if n==1 or n==2:
            return 1
        return self.fib(n-1)+self.fib(n-2)
            

总结

知道递归式就已经解决了90%

 70. 爬楼梯   

本题大家先自己想一想, 之后会发现,和 斐波那契数 有点关系。

代码随想录

视频:带你学透动态规划-爬楼梯(对应力扣70.爬楼梯)| 动态规划经典入门题目_哔哩哔哩_bilibili

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

总结

感觉像是高中的概率里的爬楼梯的问题,要找到它的定义才行。

 746. 使用最小花费爬楼梯 

这道题目力扣改了题目描述了,现在的题目描述清晰很多,相当于明确说 第一步是不用花费的。 

更改题目描述之后,相当于是 文章中 「拓展」的解法 

代码随想录

视频讲解:动态规划开更了!| LeetCode:746. 使用最小花费爬楼梯_哔哩哔哩_bilibili

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

        

总结

我开始是想的是第一步和第二步是不要钱的,但考虑到无法比较当前的位置价格的大小,所以考虑的是起跳完后的值,结果只需要在比较时加上当前的值就行了。

你可能感兴趣的:(算法)