Dynamic Programing
Dynamic Programing
Fibonachi Series:
class Solution {
public:
int fib(int n) {
if (n <= 1) return n;
return fib(n - 1) + fib(n - 2);
}
};
Complexity:
class Solution {
public:
int fibHelper(int n, vector<int>& dp) {
if (n <= 1) return n;
if (dp[n] != -1) return dp[n];
dp[n] = fibHelper(n - 1, dp) + fibHelper(n - 2, dp);
return dp[n];
}
int fib(int n) {
vector<int> dp(n + 1, -1);
return fibHelper(n, dp);
}
};
Complexity:
class Solution {
public:
int fib(int n) {
if (n <= 1) return n;
vector<int> dp(n + 1, 0);
dp[0] = 0;
dp[1] = 1;
Instead of maintaining a full table, we only keep the last two Fibonacci
numbers to save space.
class Solution {
public:
int fib(int n) {
if (n <= 1) return n;
int prev1 = 0, prev2 = 1;
for (int i = 2; i <= n; i++) {
int current = prev1 + prev2;
prev1 = prev2;
prev2 = current;
}
return prev2;
}
};
Complexity: