1.题目
斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
给定 N,计算 F(N)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fibonacci-number
2.想法
与70爬楼梯以及1137第N个泰波那契数相似,70题及1137题为其变体形式
这里附上链接:70爬楼梯
1137第N个泰波那契数
3.自己题解
class Solution {
public int fib(int N) {
int a[]=new int[N+1];
return fib(0,N-1,a);
}
public int fib(int i,int n,int []a)
{
if(i>n){return 0;}
if(i==n){return 1;}
if(a[i]>0){return a[i];}
a[i]=fib(i+2,n,a)+fib(i+1,n,a);
return a[i];
}
}
4.动态规划解法
public class Solution {
public int climbStairs(int n) {
if (n == 1) {
return 1;
}
int[] dp = new int[n + 1];
dp[0] = 0;
dp[1] = 1;
for (int i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}