剑指offer 09变态跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

java版本:

public class Solution {

    public  static void main(String[] args){
        long startTime=System.currentTimeMillis();
        System.out.println("第4项的结果是:"+JumpFloorII(4));
        long endTime=System.currentTimeMillis();
        System.out.println("程序执行的时间:"+(endTime-startTime)+"ms");
    }
    /*递归*/
    public static int JumpFloorII(int target){
        if(target==1){
            return 1;
        }else{
            return 2*JumpFloorII(target-1);
        }
    }
    /*左移*/
    /*public static int JumpFloorII(int target){
            int a=1;
            return a<<(target-1);
    }*/

}

js版本:

function jumpFloorII(number)
{
    if(number==1){
        return number;
    }else{
          return 2*jumpFloorII(number-1);
    }// write code here
}

总结:用递归的思路

第一步可以跳1阶,跳2阶.......可以跳n阶,有n种跳法。

第二步剩余(n-1)个台阶,f(n-1)种跳法。

第三步剩余(n-2)个台阶,f(n-2)种跳法。

所以

f(n)=f(n-1)+f(n-2)+.........f(1)

f(n-1)=f(n-2)+f(n-3)+.........f(1)

两式相减得到发f(n)=2*f(n-1)。

左移思路:

每一项的结果都是上一项的2倍,所以左移1位。

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

时间: 2024-10-14 22:32:42

剑指offer 09变态跳台阶的相关文章

剑指offer:变态跳台阶

目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:变态跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路 这题的名字和题面都和跳台阶这题很相似,没看过的同学可以先看看. 很明显,这题最大的改变就是状态转移式由原来的f[n]=f[n-1]+f[n-2]变成了f[n]=1+f[1]+f[2]+...+f[n-1].这就意味着不能完全照搬斐波那契数列的思想进行解题.但这个状态转移式很明显也具有规律性,

剑指OFFER之变态跳台阶(九度OJ1389)

题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1<=n<=50). 输出: 对应每个测试案例, 输出该青蛙跳上一个n级的台阶总共有多少种跳法. 样例输入: 6 样例输出: 32 解题思路: 这道题目跟之前的跳台阶大同小异,只是跳台阶的阶数从1变到了n,也就是说,不再是跳一下或者跳两下的问题,而是跳n下的问题.那么解题的思路显然还得逆向分析,我们

[剑指Offer]2.变态跳台阶

题目 一仅仅青蛙一次能够跳上1级台阶,也能够跳上2级--它也能够跳上n级. 求该青蛙跳上一个n级的台阶总共同拥有多少种跳法. 思路 用Fib(n)表示青蛙跳上n阶台阶的跳法数,设定Fib(0) = 1: 当n = 1 时. 仅仅有一种跳法,即1阶跳,即Fib(1) = 1; 当n = 2 时. 有两种跳的方式,一阶跳和二阶跳,即Fib(2) = Fib(1) + Fib(0) = 2; 当n = 3 时.有三种跳的方式,第一次跳出一阶台阶后,后面还有Fib(3-1)中跳法,第一次跳出二阶台阶后.

剑指offer 9.变态跳台阶

9.变态跳台阶 题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路 与上题相似,假设要到3级,那么可以从0,1,2级直接到三级,那么f3=f1+f2+1,f2=f1+1,f3=4,找规律. 也可以换一种思路,不限制长度,那就是每一级都可以跳,只有选择跳和不跳,那么就是2^(n-1),结果一样. 代码 public static int JumpFloor(int target) { if (target <= 0) { re

【剑指Offer】变态跳台阶

问题描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级. 求该青蛙跳上一个n级的台阶总共有多少种跳法. 解题思路: 每一次调用函数都是查找这个楼梯数有多少种跳法,如果楼梯数已为0, 则表明只有这一种跳法,也就是没有下一步的跳法了: 若不为0,则设这一步会跳1.2.3~n阶,然后将跳完这一步的 下一步跳法的跳法相加,返回结果. 示例: n=4 1 1 1 1 1 1 2 1 2 1 1 3 2 1 1 2 2 3 1 4 代码实现 class Solution { publi

剑指offer:青蛙跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. class Solution: """ f(0) = 1 f(1) = 1 ... f(n-1) = f(n-2) + f(n-3) + ... + f(1) + f(0) f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(1) + f(0) = f(n-1) + f(n-1) = 2 * f(n-1) f(n) = 2^(

剑指offer-青蛙变态跳台阶-全概率公式

剑指offer8:青蛙跳台阶

1. 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 2. 思路和方法 青蛙每一次跳跃只有两种选择:一是再跳1级阶梯到达第n级阶梯,此时小青蛙处于第n-1级阶梯:或者再跳2级阶梯到达第n级阶梯,此时小青蛙处于n-2级阶梯.于是,n级阶梯的跳法总是依赖于前n-1级阶梯的跳法总数f(n-1)和前n-2级阶梯的跳法总数f(n-2).因为只有两种可能性,所以,f(n)=f(n-1)+f(n-2): 递推公式f(n)=f(n

[剑指OFFER] 斐波那契数列- 跳台阶 变态跳台阶 矩形覆盖

跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. class Solution { public: int jumpFloor(int number) { if(number == 1) return 1; if(number == 2) return 2; int n1 = 1; int n2 = 2; int rtn = 0; for(int i = 3; i <= number; i++) { rtn = n1 + n2; n1 = n2;