查找斐波纳契数列中第 N 个数。
所谓的斐波纳契数列是指:
- 前2个数是 0 和 1 。
- 第 i 个数是第 i-1 个数和第i-2 个数的和。
斐波纳契数列的前10个数字是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...
采用递归的方法由于时间复杂度高而没有通过
下面采用备忘录的方法
代码
class Solution{
public:
/**
* @param n: an integer
* @return an integer f(n)
*/
int fibonacci(int n) {
// write your code here
int *arry=new int[n+1];
arry[1]=0;
arry[2]=1;
if(n==1) return 0;
else if(n==2) return 1;
else {
for(int i=3;i<=n;i++)
arry[i]=arry[i-1]+arry[i-2];
delete [] arry;
return arry[n];
}
}
};
拓展题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:当跳上最后一个台阶的时候,他可能是通过跳1阶跳上来的,也可是通过跳2级跳上来的f(n)=f(n-1)+f(n-2)
我们可以用2X1(2行1列)的小矩形横着或者竖着去覆盖更大的矩形。请问用8个2X1的小矩形无重复地覆盖一个2X8的大矩形,总共有多少种方法。
思路:覆盖完成的最后一步有两种可能,第一种可能是横着覆盖;第二种可能是竖着覆盖,竖着覆盖的话倒数第二步也只能是竖着覆盖,所以f(8)=f(7)+f(6)