剑指offer,每日一练 2018.10.17

今天做的一系列回归与循环的算法题(当数学题做)。

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];
}

猜你喜欢

转载自blog.csdn.net/qq_41261490/article/details/83117614