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