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

  • Post author:
  • Post category:其他


题目描述

一只青蛙一次可以跳上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);
        }
    }
}



版权声明:本文为Sakura__Lu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。