重做剑指offer(八)——跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
分析:拿到题目一看,诶?数学题!好说好说,还有我做不出来的数学题吗?(事实证明,后来被打脸无数次,快自闭了都,但不是这题,要不然我真的要自闭了)
那我们来看看题吧,n阶台阶,每次只能跳1阶或2阶。题目没啥好解释的,看思路:设n阶台阶有f(n)种跳法,第一次跳的话可以选择跳1阶也可以选择跳2阶,共有两种跳法,假如说第一次选择跳1阶台阶,那后面的n-1共有f(n-1)种跳法,假如说第一次选择跳2阶台阶,那后面的n-1共有f(n-2)种跳法,所以f(n)=f(n-1)+f(n-2)。怎么样,是不是似曾相识,这不就是上一题的斐波那契数列吗,来来来,递归!哦不,还是循环吧,时间超了就不好了。但注意与上一题不一样的是初始的几个点的值不一样,可以理解为初始条件不一样,稍微改改答案就出来了。
public class Solution {
public int JumpFloor(int target) {
if(target == 1)
return 1;
if(target == 2)
return 2;
int fib1 = 1;
int fib2 = 2;
int fibn = 1;
for(int i = 3;i <= target;i++){
fibn = fib1+fib2;
fib1 = fib2;
fib2 = fibn;
}
return fibn;
}
}
那有人说如果我想不到这样的解法怎么办啊,那不是完啦,不不不,其实吧,我一开始也没想到,而是先写了几个情况,当n等于1时;当n等于2时;当n等于3时;当n等于4时,当n等于5时,这时候也就能找到规律了。