剑指Offer07 - 斐波那契数列

Posted jianminglin

tags:

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

斐波那契数列

时间限制:1秒
空间限制:32768K
本题知识点:递归

题目描述:
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39
public class Solution 
    public int Fibonacci(int n) 

    
解法一:
/**
 * 暴力递归法(性能超级差,谁试谁知道)
 */
public class Solution 
    
    public int Fibonacci(int n) 
        
        if(n == 0)
            return 0;
        
        if(n == 1)
            return 1;
        
        
        return Fibonacci(n-1)+Fibonacci(n-2);
    
解法二:
/**
 * 备忘录法 自顶而下,在树的多路归并时有较好的效果
 */
public class Solution 
    
    int[] array = new int[40];
    
    public int Fibonacci(int n) 
        
        array[0] = 0;
        array[1] = 1;
        array[2] = 1;
        
        if(n == 0)
            return 0;
        
        if(n == 1 || n == 2)
            return 1;
        

        int result = memo(n);
        return result;
    
    
    public int memo(int n)
        if(array[n-2] == 0)
            array[n-2] = memo(n-2);
        
        
        if(array[n-1] == 0)
            array[n-1] = memo(n-1);
        
        
        return array[n-2] + array[n-1];
    
解法三:
/**
 * n 的值较小,因此可以直接将数组求出后,查找对应的 n 值
 */
public class Solution 
    
    public int Fibonacci(int n) 
        int[] array = new int[40];
        array[0] = 0;
        array[1] = 1;
        for(int i=2; i<40; i++)
            array[i] = array[i-1] + array[i-2];
        
        return array[n];
    
解法四:
/**
 * 动态维护 i 和 j 两个值,根据 n 的值返回靠前的 i
 */
public class Solution 
    
    public int Fibonacci(int n) 
        int i = 0;
        int j = 1;
        int tmp;
        while((n--)>0)
            tmp = j;
            j += i;
            i = tmp;
        
        return i;
    

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

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

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

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

剑指offer-斐波那契数列

剑指offer--Day3

剑指offer--Day3