我们先来观察一下
跳到台阶1的方案:
① 0⇒1
跳到台阶2的方案:
① 0⇒1⇒2
② 0⇒2
跳到台阶3的方案:
① 0⇒1⇒2⇒3
② 0⇒2⇒3
③ 0⇒1⇒3
跳到台阶4的方案:
① 0⇒1⇒2⇒3⇒4
② 0⇒2⇒3⇒4
③ 0⇒1⇒3⇒4
④ 0⇒1⇒2⇒4
⑤ 0⇒2⇒4
可以发现:
跳到台阶4的方案是从台阶3跳1级或从台阶2跳2级
设:𝐹(𝑛) 表示跳到台阶 𝑛 (n>2) 的方案数,
则 𝐹(𝑛)=𝐹(𝑛−1)+𝐹(𝑛−2)
C++版本代码:
class Solution { public: int jumpFloor(int number) { if(number <= 2){return number;} int f1,f2,ans; f1=1;f2=2;//f1,f2分别表示f(n-1)和f(n-2) for(int i = 3 ; i <= number ;i++)//从f(3)递推到f(n) { ans = f1+f2; f1 = f2; f2 = ans; } return ans; } };
python版本代码:
class Solution: def jumpFloor(self, number): if number<=2: return number f1 = 1 f2 = 2 for i in range(3,number+1): ans = f1+f2 f1 = f2 f2 = ans return ans
如果对问题进行一下扩展
一只青蛙一次可以跳上a级台阶,也可以跳上b级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 (a<b)
设:𝐹(𝑛) 表示跳到台阶 𝑛 (n>max(𝑎,𝑏)) 的方案数