剑指offer(八)——跳台阶
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
题解
这道题是斐波那契数列的变种,我们可以通过找规律发现解法。
- 跳1级台阶:1
- 跳2级台阶:2
- 跳3级台阶:3
- 跳4级台阶:5
- 跳5级台阶:8
即 - f(n) = 1 当n=1时
- f(n) = 2 当n=2时
- f(n) = f(n-1) + f(n-2) 当n>2时
两种写法:
一、自顶向下
public static int JumpFloor(int target) {
if (target == 1) {
return 1;
}
if (target ==2) {
return 2;
}
return JumpFloor(target - 1) + JumpFloor(target - 2);
}
二、自底向上
public static int JumpFloor(int target) {
int pre = 1,post = 1;
for(int i=1; i<target; i++) {
post = post + pre;
pre = post - pre;
}
return post;
}