今天做的一系列回归与循环的算法题(当数学题做)。
1、大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39
时间限制:1秒 空间限制:32768K 热度指数:417477
//斐波那契数列 a[n] = a[n-1] + a[n-2];
function Fibonacci(n)
{
// write code here
if(n <= 1) return n; //因为递归,所以前两个值得自己找出
else{
var arr=[];
arr[0] = 0;
arr[1] = 1;
for(var i=2;i<=n;i++){
arr[i] = arr[i-1] + arr[i-2];
}
}
return arr[n];
}
2、一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
时间限制:1秒 空间限制:32768K 热度指数:318040
//典型的找规律的题,当数学题做,先找出算第n个的算法
//不难发现,a1 = 1; a2 = 2; a3 = 3; a4 = 5; a5 = 8;又是典型的斐波那契数列
function jumpFloor(number)
{
// write code here
var arr = [];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
for(var i=3;i <= number;i++){
arr[i] = arr[i-1] + arr[i-2];
}
return arr[number];
}
3、一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
时间限制:1秒 空间限制:32768K 热度指数:249111
//同样的找规律,得出a1 = 1; a2 = 2; a3 = 4; a4 = 8; a5 = 16;
//不难得出,an = 2^(n-1);即得出算法
function jumpFloorII(number)
{
// write code here
var sum=1;
if(number == 1) return 1;
else{
for(var i=1;i<number;i++){
sum*=2;
}
}
return sum;
}
4、我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
时间限制:1秒 空间限制:32768K 热度指数:222312
//同样找规律,得出 a1 1 = 1; a2 = 2; a3 = 3; a4 = 5; a5 = 8;
//典型的斐波那契数列
function rectCover(number)
{
// write code here
var arr = [];
arr[0]=0;
arr[1]=1;
arr[2]=2;
for (var i=3;i<=number;i++){
arr[i] = arr[i-1] + arr[i-2];
}
return arr[number];
}