[LeetCode] Climbing Stairs [24]

題目

You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

原題鏈接(點我)

解題思路

爬樓梯:一次可以爬1階或者2階,問爬n階樓梯有多少方法?
這是個典型的斐波拉切應用場景,我們下面來分析下:
對於1階,只有 1 種方法, 記爲f(1);
對於2階,記爲f(2):

最後一步只爬1階,有 f(1);

最後一步一次爬2階,即一步上來,這是1中方法;

綜合下來 f(2) = f(1) +1 = 2;

對於3階,記爲f(3):

最有一步只爬1階,有f(2)種方法

最後一步一次爬2階,有f(1)種方法;

綜合下來 f(3) = f(1) + f(2) = 3

對於4階,記爲f(4):

最有一步只爬1階,有f(3)種方法

最後一步一次爬2階,有f(2)種方法;

綜合下來 f(4) = f(3) + f(2)

....
對於n階,記爲f(n):

最有一步只爬1階,有f(n-1)種方法

最後一步一次爬2階,有f(n-2)種方法;

綜合下來 f(n) = f(n-1) + f(n-2).

想必通過以上分析,你應該能夠看明白了,就是一個斐波拉切問題。

代碼實現:

class Solution {
public:
    int climbStairs(int n) {
         if(n==0) return 0;
         if(n==1) return 1;
         if(n==2) return 2;
         int n1=1, n2 = 2;
         int sum = 0;
         for(int i=3;i<=n; ++i){
             sum = n1 + n2;
             n1 = n2;
             n2 = sum;
         }
         return sum;
    }
};

如果你覺得本篇對你有收穫,請幫頂。
另外,我開通了微信公衆號--分享技術之美,我會不定期的分享一些我學習的東西.
你可以搜索公衆號:swalge 或者掃描下方二維碼關注我

(轉載文章請註明出處: http://blog.csdn.net/swagle/article/details/29562769 )

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