509. 斐波那契数
题目链接
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fibonacci-number/submissions/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目描述
题目分析
动规问题:
1.确定dp以及dp下标的含义。 vector dp(n + 1);dp[i]:第i个斐波那契数列的值是dp[i]
2.状态转移公式。 dp[i] = dp[i - 1] + dp[i - 2];
3.初始化dp。 dp[0] = 0; dp[1] = 1;
4.确定遍历顺序。 遍历顺序 从前向后
5.举例推导dp数组。 0 1 1 2 3 5 8 13 21
- 动规
时间复杂度:O(n)
空间复杂度:O(n)
class Solution {
public:
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(n)
空间复杂度:O(1)
class Solution {
public:
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];
}
};
- 递归
时间复杂度:O(2^n)
空间复杂度:O(n)
class Solution {
public:
int fib(int n) {
if(n <= 1) return n;
return fib(n - 1) + fib(n - 2);
}
};