LeetCode 70

       Climbing Stairs

這個題的意思是爬階梯,一次可以爬兩個臺階或者一個臺階,問有多少種方法爬到頂。這確實是個easy的問題,見過這種問題的人可能很快就能寫出代碼,因爲這個問題就是斐波拉寫數列,它符合一個一個遞推關係式:

       F(n) = F(n-1) + F(n-2)

所以我們可以採用遞歸和循環的方法來解題,不過這類問題的遞歸解法效率太低(因爲它展開後就像一個完全二叉樹那樣的,很多項都會重複計算很多次,效率確實很低,這裏我就不細細講述了,不懂得可以給我私信,我們交流一下,我測試了一下大概50的時候就會就算很久,而循環的方法效率就高很多了),所以我採用的是循環的方法。

      請看代碼:

class Solution {
public:
    int climbStairs(int n) 
    {   //斐波拉寫數列
        int step1 = 0; //記錄第一項 F(n-2)
		int step2 = 1; //記錄第二項 F(n-1)
		int solves = 0; //F(n) = F(n-2) + F(n-1)
		
		for (int i = 1; i <= n; ++i)
		{
			solves = step1 + step2;
			step1 = step2;
			step2 = solves;
		}

		return solves;
    }
};


其實像這中類型的問題還有很多,比如青蛙跳臺階啊等等,我們只要找出他的規律了,就很快能夠解決此問題了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章