解法
1、DP求解
2、循環求解
3、公式法(實現較複雜)
時間複雜度O(logn)
代碼
//動態規劃求解
class Solution {
public:
const int m = 1e9 + 7;
int fib(int n) {
vector<int> dp(n + 1, -1);
return solve(n, dp);
}
int solve(int n, vector<int>& dp) {
//遞歸邊界
if (n == 0 || n == 1) return n;
//狀態方程
//如果該值已被計算過,則直接返回計算的值
if (dp[n] != -1) return dp[n];
else//重新進行計算
{
dp[n] = (solve(n - 1, dp) + solve(n - 2, dp)) % m;
return dp[n];
}
}
};
/*循環求解*/
class Solution {
public:
int fib(int n) {
int m = 1e9 + 7;
if (n == 0 || n == 1) return n;//特殊情況處理
int firstNumber = 0;//記錄前一個值
int secondNumber = 1;//記錄後一個值
int num;
for (int i = 2; i <= n; i++)
{
num = (firstNumber + secondNumber ) % m;
firstNumber = secondNumber;
secondNumber = num;
}
return num;
}
};