【劍指offer】面試題10- I. 斐波那契數列

解法

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;
	}
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章