剑指Offer斐波那契数列

Posted xiexinbei0318

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer斐波那契数列相关的知识,希望对你有一定的参考价值。

斐波那契数列

题目:要求输入一个整数n,请你输出斐波那契数列的第n项

 

A1:教科书方法,递归,但是时间复杂度随着n的增大而递增 ====> 不实用

A2:可以把得到的数列中间项保存起来,避免重复计算  ====> 时间复杂度O(n)

A3:数据公式(太高级了,不太懂)

 

//O(n)方法,保存中间项

class Solution 
public:
    int Fibonacci(int n) 
        int ret[] = 0,1;
        if(n <= 1)
        
            return ret[n];
        
        
        long long fib_1 = 0;
        long long fib_2 = 1;
        long long fib_n = 0;
        
        for(int i = 2; i <= n ;i++)
        
            fib_n = fib_1 + fib_2;
            fib_1 = fib_2;
            fib_2 = fib_n;
        
        return fib_n;
    
;

  

技术图片

 

 

相关题目:

  求和(输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来)

  寻找第K大(有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。)

  生成格雷码(在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。给定一个整数n,请返回n位的格雷码,顺序为从0开始。)

 

青蛙跳台阶

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

 

class Solution 
public:
    int jumpFloor(int number) 
        if(number <= 2)
        
            return number;
        
        long long number_1 = 1;
        long long number_2 = 2;
        long long number_n = 0;
        for (int i = 3; i <= number; i++)
        
            number_n = number_1 + number_2;
            number_1 = number_2;
            number_2 = number_n;
        
        return number_n;
        
    
;

  

技术图片

 

相关题目:

  覆盖矩形(可以用2*1的小矩形覆盖更大的矩形,请问用8个2*1的小矩形无重叠的覆盖一个2*8的大矩形,总共有多少种方法)

  爬楼梯(在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问计算出你可以采用多少种不同的方式爬完这个楼梯。)

  爬楼梯2(在你面前有一个n阶的楼梯(n>=100且n<500),你一步只能上1阶或3阶。请问计算出你可以采用多少种不同的方式爬完这个楼梯(到最后一层为爬完))

  

 

以上是关于剑指Offer斐波那契数列的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer-斐波那契数列-递归和循环-python

[LeetCode]剑指 Offer 10- I. 斐波那契数列

[LeetCode]剑指 Offer 10- I. 斐波那契数列

剑指offer-斐波那契数列

剑指offer--Day3

剑指offer--Day3