32.变态跳台阶

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

题目描述

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


解题思路:


分析:用Fib(n)表示青蛙跳上n阶台阶的跳法数,青蛙一次性跳上n阶台阶的跳法数1(n阶跳),设定Fib(0) = 1;

      当n = 1 时, 只有一种跳法,即1阶跳:Fib(1) = 1;

      当n = 2 时, 有两种跳的方式,一阶跳和二阶跳:Fib(2) = Fib(1) + Fib(0) = 2;

      当n = 3 时,有三种跳的方式,第一次跳出一阶后,后面还有Fib(3-1)中跳法; 第一次跳出二阶后,后面还有Fib(3-2)中跳法;第一次跳出三阶后,后面还有Fib(3-3)中跳法

       Fib(3) = Fib(2) + Fib(1)+Fib(0)=4;

      当n = n 时,共有n种跳的方式,第一次跳出一阶后,后面还有Fib(n-1)中跳法; 第一次跳出二阶后,后面还有Fib(n-2)中跳法..........................第一次跳出n阶后,后面还有 Fib(n-n)中跳法.

                Fib(n) = Fib(n-1)+Fib(n-2)+Fib(n-3)+..........+Fib(n-n)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n-1)

     又因为Fib(n-1)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n-2)

     两式相减得:Fib(n)-Fib(n-1)=Fib(n-1)         》  Fib(n) = 2*Fib(n-1)     n >= 2


也可以说Fib(n)=2^(n-1)

参考:跳台阶问题(变态跳台阶)的三种解法https://blog.csdn.net/u014082714/article/details/44406917


可参考的


//递归


int solution4(int n)

{

   if(n == 0 || n == 1)

       return 1;

   else

       return 2*solution4(n-1);

}

//变态跳滚动数组

int solution5(int n)

{

   int F[2]={0,1};

   if(n < 2)

       return F[n];

   for(int i=2;i<=n;i++)

   {

       F[0]=F[1];

       F[1]=2*F[0];

   }

   return F[1];

}

参考文章:https://blog.csdn.net/u014082714/article/details/44406917


解法:


递归:


class Solution {

   public:

    int jumpFloorII(int number)

    {

       if (number <= 0)

       {

           return -1;

       }

        else if (number == 1)

       {

           return 1;

       }

        else

       {

           return 2 * jumpFloorII(number - 1);

       }

   }

};

移位运算:


利用公式:Fib(n)=2^(n-1) 左移的位运算比乘法快


class Solution {

public:

   int jumpFloorII(int number) {

               int a=1; return a<<(number-1);

   }

};

迭代求法:


class Solution {

public:

   int jumpFloorII(int number)

   {

       int jumpFlo=1;

       while(--number)//减1之后的

       {

           jumpFlo*=2;

       }

       return jumpFlo;

   }

};

目录
相关文章
网站备案工信部短信核验操作流程
阿里云网站备案工信部短信核验操作流程,网站备案通过阿里云初审后后提交到管局,需要进行工信部短信核验
1504 0
网站备案工信部短信核验操作流程
|
11月前
|
存储 人工智能 算法
加速推进 AI+OS 深度融合,打造最 AI 的服务器操作系统 | 2024龙蜥大会主论坛
本次方案的主题是加速推进 AI+OS 深度融合,打造最 AI 的服务器操作系统,从产业洞察、创新实践、发展建议三个方面,指出 AI 原生应用对操作系统提出更高要求,需要以应用为导向、以系统为核心进行架构创新设计,要打造最 AI 的服务器操作系统。 1. 产业洞察 2. 创新实践 3. 发展建议
417 6
|
12月前
|
自动驾驶 vr&ar 开发者
把Waymo玩成GTA游戏!全生成式的车辆行驶轨迹视频合成器来了
FreeVS(Free View Synthesis)是一种创新技术,能够在真实驾驶场景中合成车辆的摄像头视角视频,不仅限于已知轨迹,还能生成全新轨迹上的视频。它采用伪图像表示和视角变换模拟技术,突破了传统方法对已知轨迹的依赖,提升了自动驾驶技术的测试和验证能力。实验结果显示,FreeVS在Waymo Open Dataset上表现出色,具有广泛的应用前景。论文链接:https://arxiv.org/abs/2410.18079
365 16
|
数据采集 DataWorks 搜索推荐
DataWorks产品最佳实践测评:用户画像分析实践
DataWorks产品最佳实践测评:用户画像分析实践
371 3
|
运维 jenkins Java
Jenkins在持续集成与持续部署中的价值
Jenkins在持续集成与持续部署中的价值
|
数据采集 搜索推荐 安全
做谷歌独立站多少钱?
答案是:做谷歌独立站是3000元。 当你想在谷歌上创建一个独立站点,你可能会想知道这需要多少费用。 以下内容将为你详细解释与创建谷歌独立站点相关的费用。 初始建站费用 首先,你需要购买一个域名。 通常,一个域名的价格会在10元至200元之间,这取决于域名的流行度和后缀。 接下来,你可能需要一个主机来托管你的网站,这通常每月会花费你20元至200元。
928 0
做谷歌独立站多少钱?
|
程序员 Linux C++
复工第一天:请马上卸载这个软件!!!
复工第一天:请马上卸载这个软件!!!
468 0
复工第一天:请马上卸载这个软件!!!
|
安全 数据安全/隐私保护
阿里云企业实名认证和个人实名认证区别对比
2023阿里云企业实名认证和个人实名认证区别对比,阿里云账号根据实名认证主体分为个人认证和企业认证两种,企业实名认证和个人实名认证有什么区别?区别大了,如果公司的阿里云账号使用员工的个人身份进行实名认证,一旦员工离职,公司账号就找不回来了。阿里云百科来详细说下阿里云账号个人实名认证和企业实名认证的区别:
537 0
阿里云企业实名认证和个人实名认证区别对比
|
弹性计算 编解码 前端开发
阿里云ecs.c6.xlarge服务器4核8G计算型c6性能评测
阿里云服务器ECS计算型c6实例4核8G配置ecs.c6.xlarge,CPU采用Intel Xeon(Cascade Lake) Platinum 8269CY,2.5 GHz主频,睿频3.2 GHz,计算性能稳定,I/O优化实例,具有超高网络收发包PPS能力
1288 0
阿里云ecs.c6.xlarge服务器4核8G计算型c6性能评测
|
Java fastjson
Java实现数据脱敏
Java实现数据脱敏
733 0