递归、动态规划、斐波那契数列公式三种解
递归容易超时、直接动态规划空间复杂度为O(n),优化一下可以为O(1):
class Solution:
def climbStairs(self, n: int) -> int:
if n == 1:return 1
if n == 2:return 2
a,b,res = 1,2,0
for i in range(3,n+1):
res = a+b
a = b
b = res
return res
用斐波那契数列计算公式:
import math
sqrt5 = 5 ** 0.5
fibin = math.pow((1+sqrt5) / 2,n+1) - math.pow((1-sqrt5) / 2,n+1)
return int(fibin / sqrt5)