青蛙跳台阶问题(斐波拉契数列、动态规划)
青蛙跳台阶问题
题目描述:
一只青蛙一次可以跳上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;}
}
青蛙跳台阶问题(斐波拉契数列、动态规划)相关推荐
- Fibonacci斐波拉契数列----------动态规划DP
n==10 20 30 40 50 46 体验一下,感受一下,运行时间 #include <stdio.h> int fib(int n) { if (n<=1) retur ...
- 经典算法(6)斐波拉契数列、兔子繁殖、跳台阶算法
写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...
- 算法—斐波拉契数列(跳楼梯问题)
问题描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 这道题一看,就会轻易的知道用递归,f(1)=1;f(2)=1;f(n)=f(n-1)+f(n-2 ...
- [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 ...
- 函数-生成器之斐波拉契数列
斐波拉契数列:除第一个和第二个数外,任意一个数都可以由前两个数相加而来. 无法用生成式,但可由函数生成. 函数生成斐波拉契数列数列: def fib(max):n,a,b=0,0,1while n & ...
- C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)
本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...
- 趣学算法之斐波拉契数列实现
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 > ...
- c语言n次方怎么输入_C语言实现斐波拉契数列
C语言实现斐波拉契数列教程 怎么使用 C 语言实现计算斐波拉契数列的第 N 项的值? C语言实现斐波拉契数列详解 背景知识 斐波那契数列是一组第一位和第二位为 1,从第三位开始,后一位是前两位和的一组 ...
- 递归、尾递归、迭代算法【在 斐波拉契数列】上的实现
/* 递归: [逆序]从未知点推到已知点,[顺序]代入已知点结果,从已知点带入并计算到未知点,最终到终点 尾递归: 从起点开始,依顺序计算结果,并无限靠近最终目标点 迭代: 从 ...
最新文章
- 波士顿动力一只48.8万,美女沙滩遛「狗」,网友直呼:壕
- Android开发之单例模式初探
- java使用websocket前后端通信实现
- 企业管理 为什么老板再难,也不会放弃?而员工做得不顺,就想逃走?
- mxnet基础到提高(44)-ndarray.arange创建行向量
- Spring的事务属性
- asp.net 使用my97 datepicker实现前后两个日期的范围界定
- 安卓手机上用termux编译TeX文档并生成PDF
- 深入理解 OUI(Oracle Universal Installer)
- Android自定义View—刮刮卡效果
- 【情感识别】基于matlab GUI SVM语音情感识别(带面板)【含Matlab源码 876期】
- javassist 学习笔记
- STM8L SPI使用过程记录
- xp计算机启动检测硬盘,WindowsXP系统,每次开机都自动检测硬盘处理办法
- scrapy爬取网页数据
- Ol3中Map事件全解析
- echarts pie饼图的使用(初级版包括设置百分比)
- lmdb文件的读取和保存
- 从数学和编程的角度去看遥感影像和处理
- linux系统php连接dm达梦
热门文章
- window setting.settings 详解。
- python+mysql+基于python的学生成绩管理系统 毕业设计-附源码071143
- 彻悟人生,句句肺腑90句
- linux系统有哪些版本 linux系统哪个版本好用
- 解决Maven打包报错Could not transfer artifact xxx.xxx找不到依赖的问题
- 出门问问AIGC SaaS平台亮相数贸会 赋能内容创作全流程
- 【UCIe】UCIe 数据完整性
- GStreamer官方教程系列——Basic tutorial 5: GUI toolkit integration
- python入门2——基础语法2——字符串详解
- 用今天的坚强,救赎曾经迷失的自己