剑指offer 08跳台阶

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

java版本:

public class Solution {

    public  static void main(String[] args){
        long startTime=System.currentTimeMillis();
        System.out.println("第30项的结果是:"+JumpFloor(30));
        long endTime=System.currentTimeMillis();
        System.out.println("程序执行的时间:"+(endTime-startTime)+"ms");
    }
    public static int JumpFloor(int target){
        int a=2,b=1,c=0;
        if(target==1||target==2){
            return target;
        }else{
            for(int i=3;i<=target;i++){
                c=a+b;
                b=a;
                a=c;
            }
            return c;
        }
    }
    /*public static int JumpFloor(int number){
        if(number<=0) {
               return 0;
            }else if(number>0&&number<4){
               return number;
            }else{
               return JumpFloor(number-1)+JumpFloor(number-2);
            }
    }
    */
}

js版本:

function jumpFloor(number)
{
    if(number<=0) {
       return 0;
    }else if(number>0&&number<4){
       return number;
    }else{
       return jumpFloor(number-1)+jumpFloor(number-2);
    }
    // write code here
}

总结:和昨天的斐波那契数列思路一致,递归的非常消耗时间。建议用存取中间项的形式做。

原文地址:https://www.cnblogs.com/yyfyl/p/9403410.html

时间: 2024-07-28 18:45:08

剑指offer 08跳台阶的相关文章

(原)剑指offer变态跳台阶

变态跳台阶 时间限制:1秒空间限制:32768K 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析一下明天是个斐波那契数列,我们一步一步退出其通项公式. 设台阶数为n, 总跳法为jumps n          jumps 1 1 2 2 3 4 4 8 5 16 现在猜测其通项公式为 fbonicc(n) = 2 * fbonicc(n - 1) 列出4的全部跳法 5的全部跳法 1111 1111 (1) 2  11

剑指offer青蛙跳台阶问题

(1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级.求该青蛙跳上一个n 级的台阶总共有多少种跳法. //递归方式 public static int f(int n) { //参数合法性验证 if (n < 1) { System.out.println("参数必须大于1!"); System.exit(-1); } if (n == 1 || n == 2) return 1; else return f(n - 1) + f(n - 2); } //非递归方式 publ

【剑指Offer】跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路 递归,由上一步到这一步青蛙跳了一级或跳了两级,当前台阶数为n,那跳n级台阶的方法数就是问跳n-1和跳n-2级楼梯方法数相加.由此可看出,这是一个斐波那契数列. 结束条件就是当n=1时,只有一种方法(跳一级):n=0时,0种方法:当n=2时,有两种方法(一次跳一级,跳两次:一次直接跳两级) 代码实现 class Solution { public: int jumpFloor(int n

剑指OFFER之跳台阶(九度OJ1388)

题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1<=n<=70). 输出: 对应每个测试案例, 输出该青蛙跳上一个n级的台阶总共有多少种跳法. 样例输入: 5 样例输出: 8 题目分析: 这道题很明显正向分析是不行的,也就是说,最后面的一个台阶,要依赖于前面台阶的.所以,最后一个台阶的方法数目可以由前面计算出来.那么,仔细想一下,一个青蛙只能跳1-2步,也就是说,

剑指offer——变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 问题分析 由于每次跳的阶数不确定,没有一个固定的规律,但是可以了解的是后一次跳是在前一次跳的结果上累加的,因此我们可以考虑使用递归的方法来解决问题. 那么从递归的三个步骤开始寻找解决方案: 1. 递归截止条件. 由于每次可以跳1-n的任意阶数,因此无论有多少阶,都可以一次跳完,为了表示方便,我们将一次性跳完的情况设为F(0),当n=1时,只能有一种情况,F(1) = 1.当n

《剑指offer》---跳台阶问题

本文算法使用python3实现 1. 问题1 1.1 题目描述: ??一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. ??时间限制:1s:空间限制:32768K 1.2 思路描述: ??(1)当 $ n=0 $ 时,返回0 ??(2)当 $ n=1 $ 时,只有一种跳法:跳1级台阶. ??(3)当 $ n=2 $ 时,有两种跳法:(a) 跳1级再跳1级:(b) 直接跳2级. ??(4)当 $ n=3 $ 时,我们只考虑最后一步的情况:(a)当最后一步只

【剑指Offer】跳台阶&amp;变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 当n = 1时,有一种跳法.f(1) = 1 当n = 2时,有两种跳法,跳两次,一次跳一级.跳一次,直接跳两级. f(2) = 2 当n > 2时,第一次跳一级,这时跳法数目就等于后面n - 1级的跳法数目,第一次跳两级,这时跳法数目就等于后面n - 2级的跳法数目.因此f(n) = f(n-1) + f(n-2).结果为斐波那契数列. 解法一.递归 (时间复杂度随

剑指offer T8跳台阶

由推导可知,递推公式为 f(n) = f(n-1) + f(n-2) 迭代法: 递归: 递归优化(保存结果,剪枝): 原文地址:https://www.cnblogs.com/jiguang321/p/11619071.html

9、剑指offer--变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路:可知本题f(n)=f(1)+f(2)+...+f(n-1)+1;通过数学归纳法得到f(n)=2^(n-1) 1 #include <iostream> 2 using namespace std; 3 class Solution { 4 public: 5 //fn=2^(n-1) 6 int jumpFloorII(int number) { 7 if(num