1. 程式人生 > >斐波那契數列幾道題目

斐波那契數列幾道題目

題目描述:大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。

n<=39

f(0)=0;f(1)=1

f(n)=f(n-2)+f(n-1),n>=2

程式碼:

class Solution {
public:
    int Fibonacci(int n) {
        if(n==0)
            return 0;
        if(n==1)
            return 1;
        int tmp1=0;
        int tmp2=1;
        for(int i=2;i<=n;i++){
            tmp2+=tmp1;
            tmp1=tmp2-tmp1;
        }
        return tmp2;
    }
};

題目描述

一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法。 f(0)=0;f(1)=1;f(2)=2; f(n)=f(n-2)+f(n-1) 程式碼:
class Solution {
public:
    int jumpFloor(int number) {
        if(number==0)
            return 0;
        if(number==1)
            return 1;
        if(number==2)
            return 2;
        int tmp1=1;
        int tmp2=2;
        for(int i=3;i<=number;i++){
            tmp2+=tmp1;
            tmp1=tmp2-tmp1;
        }
        return tmp2;
    }
};

變態跳臺階: f(0)=0;f(1)=1;f(2)=2=1+0=f(1)+f(0); f(n)=f(n-1)+f(n-2)+...+1 程式碼:
class Solution {
public:
    int jumpFloorII(int number) {
        if(number==0)
            return 0;
        if(number==1)
            return 1;
        int fn=1;
        int fn1=1;
        for(int i=2;i<=number;i++){
            fn+=fn1;
            fn1=fn;
        }
        return fn;
    }
};

下面方法是觀察規律,最後計算,2^(n-1),直接計算太慢,用左移運算子,x<<n相當於x*2^n
程式碼:
class Solution {
public:
    int jumpFloorII(int number) {
        return 1<<(number-1);
    }
};