斐波那契数列
时间限制: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;
}
}
原文地址:https://www.cnblogs.com/jianminglin/p/11361170.html
时间: 2024-11-09 01:49:59