重做剑指offer(八)——跳台阶

重做剑指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时,这时候也就能找到规律了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值