青蛙跳台阶问题

题目描述:

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

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入:n = 2
输出:2

示例 2:

输入:n = 7
输出:21

提示:

0 <= n <= 100


解题思路:

看到这道题,仿佛似曾相识!

我们先来分析一下:

  • 当n=1时,只需要跳一次即可,只有一种跳法,记f(1)=1;
  • 当n=2时,可以先跳一级再跳一级,或者直接跳二级,共有2种跳法,记f(2)=2;
  • 当n=3时,他可以从一级台阶上跳两步上来,也可以从二级台阶上跳一步上来,所以总共有f(3)=f(2)+f(1);
  • 同理当n=n的时候,总共有f(n)=f(n-1)+f(n-2)(这里n>2)种跳法。

咦!这不是斐波那契数列吗?唯一不同的可能就是起始数字了。

斐波那契数列问题: f(0)=0, f(1)=1 , f(2)=1 ;

青蛙 跳台阶问题: f(0)=1, f(1)=1 , f(2)=2 。

由此可见,这道青蛙跳台阶问题可以转化为求斐波那契数列第 n 项的值

动态规划

在我的博客中,我前面已经讲过一道斐波拉数列的问题,详见我的博客——动态规划解决斐波那契数列问题,具体的我在这就不解释了,原理基本一样!

复杂度分析:

时间复杂度 O(N): 计算 f(n)需循环 n 次,每轮循环内计算操作使用 O(1)。
空间复杂度 O(1) : 几个标志变量使用常数大小的额外空间。

代码:

class Solution {public int numWays(int n) {int a=1,b=1,sum;for(int i=0;i<n;i++){sum=(a+b)%1000000007;a=b;b=sum;}return a;}
}

青蛙跳台阶问题(斐波拉契数列、动态规划)相关推荐

  1. Fibonacci斐波拉契数列----------动态规划DP

    n==10 20 30 40 50 46 体验一下,感受一下,运行时间 #include <stdio.h> int fib(int n) { if (n<=1)     retur ...

  2. 经典算法(6)斐波拉契数列、兔子繁殖、跳台阶算法

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...

  3. 算法—斐波拉契数列(跳楼梯问题)

    问题描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 这道题一看,就会轻易的知道用递归,f(1)=1;f(2)=1;f(n)=f(n-1)+f(n-2 ...

  4. [python]练习之递归和循环实现斐波拉契数列

    1 # 程序功能:用递归和循环实现斐波拉契数列 2 # 0 1 1 2 3 5 8 13 21 34 3 4 def digui_fibo(number): 5 if number == 1: 6 r ...

  5. 函数-生成器之斐波拉契数列

    斐波拉契数列:除第一个和第二个数外,任意一个数都可以由前两个数相加而来. 无法用生成式,但可由函数生成. 函数生成斐波拉契数列数列: def fib(max):n,a,b=0,0,1while n & ...

  6. C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)

    本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...

  7. 趣学算法之斐波拉契数列实现

    1.斐波拉契数列 f(1) = 1; f(2) = 1; f(3) = f(1) + f(2);以此内推1 x = 1 f(x) = 1 x = 2f(x - 1) + f(x - 2) x > ...

  8. c语言n次方怎么输入_C语言实现斐波拉契数列

    C语言实现斐波拉契数列教程 怎么使用 C 语言实现计算斐波拉契数列的第 N 项的值? C语言实现斐波拉契数列详解 背景知识 斐波那契数列是一组第一位和第二位为 1,从第三位开始,后一位是前两位和的一组 ...

  9. 递归、尾递归、迭代算法【在 斐波拉契数列】上的实现

    /*     递归: [逆序]从未知点推到已知点,[顺序]代入已知点结果,从已知点带入并计算到未知点,最终到终点     尾递归: 从起点开始,依顺序计算结果,并无限靠近最终目标点     迭代: 从 ...

最新文章

  1. 波士顿动力一只48.8万,美女沙滩遛「狗」,网友直呼:壕
  2. Android开发之单例模式初探
  3. java使用websocket前后端通信实现
  4. 企业管理 为什么老板再难,也不会放弃?而员工做得不顺,就想逃走?
  5. mxnet基础到提高(44)-ndarray.arange创建行向量
  6. Spring的事务属性
  7. asp.net 使用my97 datepicker实现前后两个日期的范围界定
  8. 安卓手机上用termux编译TeX文档并生成PDF
  9. 深入理解 OUI(Oracle Universal Installer)
  10. Android自定义View—刮刮卡效果
  11. 【情感识别】基于matlab GUI SVM语音情感识别(带面板)【含Matlab源码 876期】
  12. javassist 学习笔记
  13. STM8L SPI使用过程记录
  14. xp计算机启动检测硬盘,WindowsXP系统,每次开机都自动检测硬盘处理办法
  15. scrapy爬取网页数据
  16. Ol3中Map事件全解析
  17. echarts pie饼图的使用(初级版包括设置百分比)
  18. lmdb文件的读取和保存
  19. 从数学和编程的角度去看遥感影像和处理
  20. linux系统php连接dm达梦

热门文章

  1. window setting.settings 详解。
  2. python+mysql+基于python的学生成绩管理系统 毕业设计-附源码071143
  3. 彻悟人生,句句肺腑90句
  4. linux系统有哪些版本 linux系统哪个版本好用
  5. 解决Maven打包报错Could not transfer artifact xxx.xxx找不到依赖的问题
  6. 出门问问AIGC SaaS平台亮相数贸会 赋能内容创作全流程
  7. 【UCIe】UCIe 数据完整性
  8. GStreamer官方教程系列——Basic tutorial 5: GUI toolkit integration
  9. python入门2——基础语法2——字符串详解
  10. 用今天的坚强,救赎曾经迷失的自己