题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
n<=39
python实现:
# -*- coding:utf-8 -*-
class Solution:
def Fibonacci(self, n):
# write code here
if n<0:
return
if n<=1:
return n
f1, f2 = 0, 1
for i in range(2, n+1):
tmp = f1+f2
f1 = f2
f2 = tmp
return f2
c++实现:
class Solution {
public:
int Fibonacci(int n) {
if(n<0)
return -1;//-1表示输入出错
if(n<=1)
return n;
int tmp, f1=0, f2=1;
for(int i=2; i<=n; i++){
tmp = f1+f2;
f1 = f2;
f2 = tmp;
}
return f2;
}
};
扩展1:跳台阶
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。(同上)
扩展2:变态跳台阶
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
python实现:
# -*- coding:utf-8 -*-
class Solution:
def jumpFloorII(self, number):
# write code here
#f(n)=2^(n-1),数学归纳法证明
if number<=0:
return 0
return 2**(number-1)
扩展3:矩形覆盖
题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
python实现:
# -*- coding:utf-8 -*-
class Solution:
def rectCover(self, number):
# write code here
#f(n) = f(n-1)+f(n-2)
if number<=0:
return 0
if number<=2:
return number
f1, f2 = 1, 2
for i in range(3, number+1):
tmp = f1+f2
f1=f2
f2=tmp
return f2