?理论基础?
无论大家之前对动态规划学到什么程度,一定要先看?我讲的?动态规划理论基础。?
如果没做过动态规划的题目,看我讲的理论基础,会有感觉?是不是简单题想复杂了??
其实并没有,我讲的理论基础内容,在动规章节所有题目都有运用,所以很重要!??
如果做过动态规划题目的录友,看我的理论基础?就会感同身受了。
视频:从此再也不怕动态规划了,动态规划解题方法论大曝光 !| 理论基础 |力扣刷题总结| 动态规划入门_哔哩哔哩_bilibili
很简单的动规入门题,但简单题使用来掌握方法论的,还是要有动规五部曲来分析。
视频:手把手带你入门动态规划 | 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.爬楼梯)| 动态规划经典入门题目_哔哩哔哩_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]
感觉像是高中的概率里的爬楼梯的问题,要找到它的定义才行。
这道题目力扣改了题目描述了,现在的题目描述清晰很多,相当于明确说?第一步是不用花费的。?
更改题目描述之后,相当于是?文章中?「拓展」的解法?
视频讲解:动态规划开更了!| 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)]
我开始是想的是第一步和第二步是不要钱的,但考虑到无法比较当前的位置价格的大小,所以考虑的是起跳完后的值,结果只需要在比较时加上当前的值就行了。