题干
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路
对于跳台阶问题是一个很好的思想,也是一个比较完美的动态规划问题,前面走过的路,进行记录,后面可以继续来使用,这里先进行一个简单的分析
台阶数 | 方法 | 不同的结果 |
---|---|---|
1 | 1 | 1 |
2 | 11 2 | 2 |
3 | 111 12 21 | 3 |
4 | 1111 112 121 211 22 | 5 |
5 | 11111 1112 1121 1211 2111, 122 212 221 | 8 |
可以看到的是对于每层的台阶由于只有两种跳的方法,就是跳一和跳二,这个时候每多增加一级的台阶的时候,就是在原来的基础上面将空闲的位置插入一个1,然后将满足两个1的转换成为一个2,就导致了,对于下一级的台阶的结果集就是等于上两个台阶的结果集,我们从上面的表格中也能够看到结果,和斐波那契数列有异曲同工之秒。
代码
public class Solution {
public int JumpFloor(int target) {
if(target<=0)
return 0;
if(target==1)
return 1;
if(target==2)
return 2;
return JumpFloor(target-1)+JumpFloor(target-2);
}
}