【笔试题】变态跳台阶

【笔试题】变态跳台阶


相关题目:
【笔试题】蜗牛爬井问题
【笔试题】变态跳台阶



问题描述

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


示例

输入:3

输出:4


分析1

  这道题和前面的跳台阶有相似之处,之前的跳台阶是一次可以跳一阶或者两阶,那么跳n阶台阶的次数可以理解为跳n-1阶和跳n-2阶的次数之和。所以本题跳n阶的次数可以理解为跳n-1,n-2,n-3,…1的次数的总和加1,加1是因为可以一次跳上去。写出几次跳的个数可以发现1,2,4,8,16,32,…规律为后一个数是前一个数的二倍,所以代码也就比较简单了


代码1

 int jumpFloorII(int number)
    {
    
    
        int sum=1;
        if(number<=1)
            return 1;
        for(int i=2;i<=number;++i)
        {
    
    
            sum=sum*2;
        }
        return sum;
    }

分析2

  采用递归的思想:假定第一次跳的是1阶,那么剩下的是n-1个台阶,跳法是f(n-1);

          假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2);

          假定第一次跳的是3阶,那么剩下的是n-3个台阶,跳法是f(n-3);

                         …

          假定第一次跳的是n-1阶,那么剩下的是1个台阶,跳法是f(1);

          假定第一次跳的是n阶,那么剩下的是0个台阶,跳法是1种

  根据上述分析可以得出:有1阶的时候可以有 f(1) = 1 =2^0种;

             有2阶的时候可以有f(2) = 1+f(1)=2=2^1种;
             有3阶的时候可以有 f(3) =1+f(2)+f(1)=4=2^2种;

                    …

             有n-1阶的时候可以有 f(n-1) =1+f(n-2)+…+f(2)+f(1)=2^(n-2)种;

             有n阶的时候可以有 f(n) =1+f(n-1)+f(n-2)+…+f(2)+f(1)=2^(n-1)种;


代码2

 int jumpFloorII(int number)
    {
    
    
        return 1<<(number-1);
    }

猜你喜欢

转载自blog.csdn.net/Sunnyside_/article/details/114656768