题目描述:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
本质:斐波那契数列
class Solution:
def climbStairs1(self, n: int) -> int:
# 递归
if n == 1 or n == 2:
return n
else:
return self.climbStairs(n-1) +self.climbStairs(n-2)
def climbStairs2(self, n: int) -> int:
# 斐波那契数列
if n == 1 or n == 2:
return n
else:
a,b,count = 1,2,3
while count <=n:
a,b = b,a+b
count += 1
return b
def climbStairs3(self, n: int) -> int:
#利用reduce
from functools import reduce
return reduce(lambda r, _: (r[1], sum(r)), range(n), (1, 1))[0]
#function :lambda r, _: (r[1], sum(r)) 返回两个元素的元组
# sequence:range(n) ,这里的n没参与具体的function里的计算,相当于只是提供循环次数
# initial: (1, 1) 初始值,认为 0层台阶 1种走法
#元组 r 来储存(当前楼梯路径数,下一层楼梯路径数)
def climbStairs4(self, n: int) -> int:
# for 循环
a, b = 1, 1
for i in range(n):
a, b = b, a + b
return a
def climbStairs5(self, n: int) -> int:
# yeild
a,b=0,1
while n>0:
yield b
a,b=b,a+b
n-=1