假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
直接想到的递归解法运行超时,时间复杂度竟然为2的n次方(n为楼梯的阶数),所以改用从前向后迭代的方法求解和动态规划两种方法求解。
关于递归方法的时间复杂度的分析一直不太明白,下篇会介绍。
class Solution:
def climbStairs(self, n: int) -> int:
#递归超时
# if n==1:
# return 1
# if n==2:
# return 2
# if n>2:
# return self.climbStairs(n-1)+self.climbStairs(n-2)
# #迭代求解,从前往后
# temp=0
# if n==1:
# return 1
# elif n==2:
# return 2
# elif n>2:
# fn_1=2
# fn_2=1
# i=3
# while i<=n:
# temp=fn_1+fn_2
# fn_2=fn_1
# fn_1=temp
# i+=1
# return fn_1
#动态规划
if n==1:
return 1
dp=[0]*(n+1)
dp[1]=1
dp[2]=2
i=3
while i<=n:
dp[i]=dp[i-1]+dp[i-2]
i+=1
return dp[n]