zoukankan      html  css  js  c++  java
  • 《剑指offer》— JavaScript(9)变态跳台阶

    变态跳台阶

    题目描述

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


    实现代码

    function jumpFloor(number)
    {
        if (number<0){
            return -1;
        }else if(number <=2){
            return number
        }
        var arr = [];
        arr[0] = 1;
        arr[1] = 1;
        for(var i = 2; i <= number; i++) {
            arr[i] = 2*arr[i - 1];
        }
        return arr[number];
    }
    

    思路一

    延续前一篇文章的思路:

    1. 假定第一次跳的是n阶,那么剩下的是0个台阶,跳法是f(0)=1;
    2. 假定第一次跳的是(n-1)阶,那么剩下的是1个台阶,跳法是f(1)=1;
      ... ...
    3. 假定第一次跳的是1阶,那么剩下的是(n-1)个台阶,跳法是f(n-1);
    4. 以此类推, 由假设得出总跳法为:f(n)=f(n-1)+f(n-2)+···+f(1)+f(0);
    5. 由于f(n-1)=f(0)+f(1)+···f(n-2),
      因此f(n)=(f(0)+f(1)+···f(n-2))+f(n-1)=f(n-1)+f(n-1);
    6. 由此可得
      n=1, f(n)=1
      n>1,且为整数, f(n)=2*f(n-1)

    思路二

    每个台阶都有跳与不跳两种情况(除了最后一个台阶),最后一个台阶必须跳。所以共用2^(n-1)中情况

    function jumpFloorII(number)
    {
        if(number === 0 ){
            return -1;
        }else{
            return Math.pow(2,number-1);
        }
    }
    
  • 相关阅读:
    Seconds_Behind_Master的计算
    innnodb 线程在做什么?
    Mysql Join_buffer_size的使用原理
    C 实现位图排序
    C 内存池的实现
    C实现队列
    mysqld执行的函数栈
    Source Insight的基本用法
    MySQL高性能以及高安全测试
    【设计篇】状态与策略
  • 原文地址:https://www.cnblogs.com/echovic/p/6430661.html
Copyright © 2011-2022 走看看