You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Note: Given n will be a positive integer.
翻译:本质就是菲波那切数列
解法一:经典递归,超时:
class Solution(object):
def climbStairs(self, n):
if n<0:
return 0
if n == 0 or n == 1 :
return 1
return self.climbStairs(n-1) + self.climbStairss(n-2)
解法二:列表遍历:
class Solution(object):
def climbStairs(self, n):
li = [1,1]
if n<0:
return 0
for i in range(2,n+1):
li.append(li[i-1] + li[i-2])
return li[n]
解法三:生成器:
import traceback
def Fib_Generator(limit):
try:
n,a,b = 0,0,1
while(n<limit):
yield b
a,b = b,a+b
n += 1
return 'done'
except StopIteration:
print("Have Been End")
pass
f = Fib_Generator(5)
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
try:
print(next(f))
except StopIteration:
pass
方法四:
class Fibs:
def __init__(self):
self.a = 0
self.b = 1
def next(self):
self.a,self.b = self.b , self.a+self.b
return self.a
def __iter__(self):
return self
fibs = Fibs()
for f in fibs:
if f < 100:
print f
else:
break