题目
代码
递归
1 class Solution { 2 public: 3 4 int fib(int n) { 5 if(n == 0) return 0; 6 if(n == 1) return 1; 7 return fib(n-1) + fib(n-2); 8 } 9 };
时间复杂度O(2N),空间复杂度O(N)递归过程中系统栈
动态规划
1 class Solution { 2 public: 3 4 int fib(int n) { 5 if(n <= 1) return n; 6 vector<int>dp(n+1); 7 dp[0] = 0;dp[1] = 1; 8 for(int i = 2;i <= n;i++){ 9 dp[i] = dp[i-1] + dp[i-2]; 10 } 11 return dp[n]; 12 } 13 };
时间复杂度O(N),空间复杂度O(N)
优化后的dp数组
1 class Solution { 2 public: 3 4 int fib(int n) { 5 if(n <= 1) return n; 6 vector<int>dp(2); 7 dp[0] = 0;dp[1] = 1; 8 int tmp = 0; 9 for(int i = 2;i <= n;i++){ 10 tmp = dp[0] + dp[1]; 11 dp[0] = dp[1]; 12 dp[1] = tmp; 13 } 14 return dp[1]; 15 } 16 };
时间复杂度O(N),空间复杂度O(1)