70. Climbing Stairs

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值