斐波那契数 (通常用 F(n)
表示)形成的序列称为 斐波那契数列 。该数列由 0
和 1
开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定 n
,请计算 F(n)
。
暴力:
class Solution { public: int fib(int n) { if (n <=1) return n; return fib(n-1)+fib(n-2); } };
记忆:
class Solution { public: int help(int n, vector<int>& memo) { if (n < 0) return 0; if (memo[n]!=-1) return memo[n]; if (n<=1) return n; int res = help(n-1,memo) + help(n-2,memo); memo[n] = res; return res; } int fib(int n) { vector<int> memo(n+1,-1); return help(n,memo); } };
dp:
class Solution { public: int fib(int n) { if (n<=1) return n; vector<int> dp(n+1,0); dp[1] = 1; for(int i = 2; i <= n; i++) { dp[i] = dp[i-1] + dp[i-2]; } return dp[n]; } };
压缩:
class Solution { public: int fib(int n) { if (n<=1) return n; int dpi=0,dpi_1=1,dpi_2=0; for(int i = 2; i <= n; i++) { dpi = dpi_1 + dpi_2; dpi_2 = dpi_1; dpi_1 = dpi; } return dpi; } };