每天一道算法题(八)---- 青蛙跳台阶

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

时间限制:1秒 空间限制:32768K 热度指数:435100

本题提示: 递归

解题思路:如果这道题没有提示,或许还要想不少时间,然是给了递归的提示,我们的思路就会清晰很多,使用递归去分解问题便是本题的解题关键!但是也没有那么简单......要是没有见过类似的题目,面试那点时间估计要想出来还是挺难的。

假设: 青蛙每一次跳跃有两种方案:一次跳一个台阶,设为方案A,一次跳两个台阶,设为方案B。假设跳上n个台阶青蛙有F种跳法,记为F(n)。

1. 对于n=1,即只有一个台阶时,只有1种跳法;

2. 对于n=2,有2种跳法:一次跳两个台阶或者两次跳一个台阶;

3. 对于n >=3时, 有两种情况:    (1)青蛙是最后一跳是一个台阶 (即确定最后一跳是方案A),那此时的F(n) = F(n - 1); 也就是说在确定最后一跳是方案A的跳法了,那么n阶的跳法其实是等于前面n-1阶的跳法。

                                                      (2)青蛙最后一跳是两个台阶(即确定最后一跳为方案B),此时F(n) = F(n - 2);也就是说在确定最后一跳是方案B的跳法了,那么n阶的跳法其实是等于前面n-2阶的跳法。

                                                      (3)对于n阶台阶,青蛙总共的跳法F(n) = F(n - 1) + F(n - 2); (这里会有很多人转不过弯来,需要好好想想)

                                                      (4)好了,公式一推出来就很明显了,这就是著名的斐波那契数列的递推式,实现方法有递归实现和循环实现两种,笔者在上一篇都已经说过了,如果不清楚的朋友请看上一篇

代码如下:

public class Solution {
    public int JumpFloor(int target) {
        if(target <=0) {
            return 1;
        }if(target == 1) {
            return 1;
        }else if (target == 2) {
            return 2;
        }else {
            return this.JumpFloor(target - 1) +  this.JumpFloor(target - 2);
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值