剑指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 - 斐波那契数列的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode]剑指 Offer 10- I. 斐波那契数列