青蛙跳台阶
题目
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
解答
# -*- coding:utf-8 -*-
'''
分析:
假设有n级台阶,青蛙从最后的第n级开始往前跳,有可能是跳1级台阶,之后还有n-
1级台阶,也就是f(n-1)中可能性;也有可能跳2级台阶,之后还有n-2级台阶,也就
是f(n-2)种可能性。所以从n级开始跳的跳法就有 f(n) = f(n-1) + f(n-2)种,
这就类似于斐波那契数列,只不过是从1,2开始
'''
class Solution:
def jumpFloor(self, number):
# write code here
# f(n) = f(n-1)+f(n-2)
if number == 0:
return None
if number ==1:
return 1
if number == 2:
return 2
a = 2
b = 1
for i in range(3, number+1):
ret = a + b
b = a
a = ret
return ret
class Solution:
# 简单版
def jumpFloor_1(self, number):
if number == 1:
return 1
if number == 2:
return 2
reg = 0
a = 1
b = 2
for i in range(2, number):
reg = a + b
a = b
b = reg
return reg
# 简化版
def jumpFloor_2(self, number):
a, b = 1, 1
for i in range(number):
a, b = b, a+b
return a
# lambda 表达式版
fibonacci = lambda n: n if n <= 2 else fibonacci(n-1) + fibonacci(n-2)