智慧团建网站几点关闭杭州明开seo
剑指 Offer(第2版)面试题 10:斐波那契数列
- 剑指 Offer(第2版)面试题 10:斐波那契数列
- 解法1:递归
- 解法2:动态规划
- 解法3:动态规划 - 空间优化
剑指 Offer(第2版)面试题 10:斐波那契数列
题目来源:21. 斐波那契数列
解法1:递归
代码:
class Solution {
public:int Fibonacci(int n) {if(n == 0) return 0;if(n == 1) return 1;return Fibonacci(n-1) + Fibonacci(n-2);}
};
复杂度分析:
时间复杂度:O(n)。
空间复杂度:O(n)。
解法2:动态规划
代码:
class Solution {
public:int Fibonacci(int 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];}
};
复杂度分析:
时间复杂度:O(n)。
空间复杂度:O(n)。
解法3:动态规划 - 空间优化
用 3 个变量就能代替之前的动态规划数组。
代码:
class Solution {
public:int Fibonacci(int n) {int first = 0, second = 1;while(n--){int res = first + second;first = second;second = res;}return first;}
};
复杂度分析:
时间复杂度:O(n)。
空间复杂度:O(1)。