题目:来源于力扣
解题思路:
先上结论:f(n)=f(n-1)+f(n-2)
1个台阶 走1步 共1种方法
2个台阶 走2次1步,走1次2步 共2种方法
(敲重点)
3个台阶
在2个台阶的基础上,只能走1步到第3个台阶,因此它没得选,还是2种方法,以下括号表示在限定的基础上
(2*1 or 2) + 1 = 3(还是两种方法)
在1个台阶的基础上,要走2个1步,或者1个2步 到第3个台阶,但是在2个台阶的基础上 已经有2个1步了,因此在1个台阶的基础上只能走1个2步,那么就有了
(1) + 2 = 3 (这其实是1种方法)
那么3个台阶 共有3种方法= 1 + 2
1 是 1个台阶的基础上共有几种走法
2 是 2个台阶的基础上共有几种走法
好了,那么4个台阶呢?
4个台阶的走法=3个台阶的走法 + 2个台阶的走法
上代码:
class Solution {
public:
int climbStairs(int n) {
//每次可以爬1个台阶 或 2个台阶,那么容易知道爬2个台阶有2种方法,爬3个台阶有3种方法
//因为爬1个台阶,再爬2个台阶就到第3台阶了
//爬2个台阶,再爬1个台阶就到第3台阶了
int p=0,q=0,r=1;
for(int i=0; i<n; ++i){
p=q;
q=r;
r=p+q;
}
return r;
}
};
好吧,我还不是完全的懂
我自问自答一下吧,如果题目改为每次可以走1步,2步 或 3步呢?
那公式就是 f(n)=f(n-1)+f(n-2)+f(n-3)!
继续刷起来!!!(ノω<。)ノ))☆.。