題目
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;
}
};
另外,我開通了微信公衆號--分享技術之美,我會不定期的分享一些我學習的東西.