思路
很简单,根据前两个数计算下一个数
代码
class Solution:
def fib(self, n: int) -> int:
if n<=1:
return n
a,b=0,1
for _ in range(2,n+1):
c=a+b
a=b
b=c
return b
思路
需要把问题抽象成斐波那契数列
代码
class Solution:
def climbStairs(self, n: int) -> int:
if n<=2:
return n
a,b=1,2
for _ in range(3,n+1):
c=a+b
a=b
b=c
return b
思路
和前两题类似,使用前两层最小的费用来计算当前层最佳费用
代码
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
n=len(cost)
dp=[0]*len(cost)
dp[0]=cost[0]
dp[1]=cost[1]
if len(cost)==2:
return min(dp)
for i in range(2,n):
dp[i]=min(dp[i-1],dp[i-2])+cost[i]
print(dp)
return min(dp[n-1],dp[n-2])