问题描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
输入描述:
输入台阶数
输出描述:
输出跳法个数
示例
示例1
输入
4
输出
5
解决思路
分析
- 本地相对来说比较简单,主要是通过罗列次数跟台阶数的关系,得到表达式,从而解决
- 通过罗列台阶树和跳法数可以发现如下关系: f ( n ) = f ( n − 1 ) + f ( n − 2 ) f(n) = f(n-1) +f(n-2) f(n)=f(n−1)+f(n−2)
- 我们可以通过递归或循环的方式实现
方法
- 通过递归
- 通过循环,需要注意,递增关系
代码实现
public class Solution {
// f(n) = f(n-1) + f(n-2)
// 递归
public int JumpFloor(int target) {
if (target == 1) {
return 1;
} else if (target == 2) {
return 2;
}
return JumpFloor(target - 1) + JumpFloor(target - 2);
}
// 循环
public int JumpFloor2(int target) {
int one = 0;// f(n-2)
int two = 1;// f(n-1)
while (target > 0) {
two = one + two; // new two = f(n) = f(n-2) + f(n-1) = one + two
one = two - one; // new one = f(n-1) = f(n) - f(n-2) = two - one
target--;
}
return two;
}
}
小伙伴如果想测试的话,可以直接到牛客网这个链接做测试