赞
踩
题目链接
509. 斐波那契数 - 力扣(LeetCode) (leetcode-cn.com)
这种题在学语言学习的时候都会了解的(谭浩强的C++、数据结构等等教材)
通俗递归解法
- int fib(int N) {
- if (N == 0 || N == 1) {
- return N;
- }
- return fib(N - 1) + fib(N - 2);
- }
上面这种做法时间复杂度很高,可能N>100时,时间就达到5秒以上了(指数级别2^n次方)
如果利用动态规划,先得递推公式,求出dp数组
空间:O(n)
- int fib(int N) {
- if (N <= 1) return N;
- vector<int> dp(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];
- }
空间:O(1)
- int fib(int N) {
- if (N <= 1) return N;
- int dp[2];
- dp[0] = 0;
- dp[1] = 1;
- for (int i = 2; i <= N; i++) {
- int sum = dp[0] + dp[1];
- dp[0] = dp[1];
- dp[1] = sum;
- }
- return dp[1];
- }
还有一道类似的题可以练手
1137. 第 N 个泰波那契数 - 力扣(LeetCode) (leetcode-cn.com)
代码实现如下
- int tribonacci(int n) {
- int tmp[3]={0,1,1};
- for (int i = 3; i <= n; i++)
- tmp[i%3]=tmp[0]+tmp[1]+tmp[2];
- return tmp[n%3];
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。