剑指 Offer 10- II. 青蛙跳台阶问题

news2024/11/25 4:52:47

一、题目描述

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

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

二、示例

示例 1:

输入:n = 2
输出:2
示例 2:

输入:n = 7
输出:21
示例 3:

输入:n = 0
输出:1

0 <= n <= 100

三、题目分析 & 解题思路

根据题目描述 可做以下规律推导
当 为 n 阶台阶
n = 1
跳法 :1 种 ( 1)
n = 2
跳法 : 2种 ( 1 + 1 或 2)
n = 3
跳法:3种 ( 1+ 1 + 1 或 1 + 2 或 2 +1)
n = 4
跳法:5 种( 1+1+1+1 或 1+2+1 或 2+1+1 或 1+1+2 或 2+2)
n = 5
跳法:8种 (1+1+1+1+1 或 1+2+1+1 或 1+1+2+1 或 1+1+1+2 或 2+1+1+1 或 2+2+1或2+1+2 或 1+2+2)

大家可以发现 随着 n 的逐渐加1 青蛙的跳法 也是 逐渐增加 且 增加得 具体跳法 有着以下这样得规律
在这里插入图片描述
通过规律可以发现
n = 4 跳法 其实就是 n = 3 的每种跳法的基础上 加 1 再加上 n = 2 的每种跳法的基础上 加 2

由此 我们可以 推导出 公式

n 个台阶的跳法为 f(n) = f(n-2) + f(n-1)

看到这里其实不难发现 n 个台阶的 跳法 其实就是 斐波那契数列
同样可以使用递归的方法,也可以使用循环相加的方法计算出 n 个台阶的 跳法个数

代码实现

循环相加方法

class Solution {
public:
    int numWays(int n) {
        int first = 1;
        int second = 1;
        int third = 0;
        if(n < 2)
        {
            return 1;
        }
        else
        {
            for(int i = 2; i <= n; i++)
            {
                third = (first + second) % 1000000007;
                first = second;
                second = third;
            }
            return third;
        }
    }
};

在这里插入图片描述

迭代

class Solution {
public:
    int numWays(int n) {
        if(n < 2)
        {
            return 1;
        }
        else
        {
            return numWays(n-1) % 1000000007  + numWays(n-2) % 1000000007;
        }
    }
};

但是由于迭代的时间复杂度过高 会超出时间限制
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/48696.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TaWRKY19/61/82激活糖转运蛋白TaSTP3从而增强小麦条锈病敏感性

文章信息 题目&#xff1a;Sugar transporter TaSTP3 activation by TaWRKY19/61/82 enhances stripe rust susceptibility in wheat 刊名&#xff1a;New Phytologist 作者&#xff1a;Baoyu Huai&#xff0c;Zhensheng Kang,Jie Liu et al. 单位&#xff1a;Northwest A&…

【C++】string使用模拟实现

文章目录前言为什么学习string类&#xff1f;1. string函数常用接口介绍1.1 string容器基本概念1.2 string构造函数1.3 string访问和修改1.4 string插入和删除1.5 string赋值操作1.5 string字符串拼接1.7 string查找和替换1.8 string子串1.9 string类对象的容量操作2. string类…

dockerfile编写

dockerfile编写 dcoker 的一个操作和交互的关系流程: dockerfile 编写规则 习惯使用大写非注释行第一行必须是FROM文件名必须是dockerfile指定一个专门的工作目录所有引入的映射文件必须在这个工作空间目录下工作空间不支持隐藏文件(.dockeringore)作用是用于存放不需要打包…

2022最新iOS最新打包发布流程

关于如何发布iOS应用到App Stroe&#xff0c;苹果开发者中心已经给出了很详细的说明。和普通的iOS应用一样&#xff0c;使用React Native开发的iOS应用也需要使用普通的iOS应用的发布流程&#xff0c;总的来说&#xff0c;主要涉及以下几步&#xff1a; 加入苹果开发者计划&am…

【Android进阶之旅】内存泄漏的危害有哪些?(案例分析)

随着计算机应用需求的日益增加&#xff0c;应用程序的设计与开发也相应的日趋复杂&#xff1b; 开发人员在程序实现的过程中处理的变量也大量增加&#xff0c;如何有效进行内存分配和释放&#xff0c;防止内存泄漏的问题变得越来越突出 例如&#xff1a; 服务器应用软件&#x…

connection is being used##server is in use and cannot be deleted

mysql数据库被黑客挟持&#xff0c;删除我的数据库&#xff0c;让我用比特币来换&#xff0c;吓死我了&#xff0c;还好是测试库&#xff0c;删了就删了&#xff0c;数据库备份还得做好&#xff0c;密码不能设置太简单了。 下面是黑客留言&#xff1a; "以下数据库已被删…

64-65 - C++中的异常处理

---- 整理自狄泰软件唐佐林老师课程 1. C异常处理 1.1 try catch内容一 C内置了异常处理的语法元素 try catchtry语句用于处理正常代码逻辑catch语句用于处理异常情况 try语句中的异常由对应的catch语句处理 1.2 C通过throw语句抛出异常信息 1.3 C异常处理分析 throw抛出的…

【SSM注解汇总】

SSM注解汇总 文章目录SSM注解汇总MyBatis注解1. param("param1","param2",...)2. MapKey("id")Spring注解1. IOC Component Service Controller Repository2. 基于注解方式实现属性注入1&#xff09;Autowired2&#xff09;Qualifier3&#xff0…

Allegro铜皮动静态切换操作指导

Allegro铜皮动静态切换操作指导 Allegro支持铜皮的动静态相互切换,并且还可以批量操作,具体操作如下 动态切换成静态 以下面图片为例,这是个动态铜皮dynamic属性 点击选择铜皮命令 选中铜皮 右击选择change shape type 会出现一个弹窗警告,直接点击是 铜皮被change成…

海外仓物流有哪些优缺点

海外仓的优点&#xff1a;较低的物流成本、更有效率的送货时效、优质的仓储管理经验、订单处理省时省力、库存管理及盘点清晰明确、远程操作省时省力、自动快捷的退换货处理流程等。海外仓的缺点&#xff1a;存储压力大&#xff0c;库存成本高&#xff0c;资金运转不便等。海外…

微软威胁建模工具 STRIDE

威胁建模要回答的四个问题 what are we woking on what can go wrong what are we going to do about this did we do a good enough job 说到threat modeling 不得不提的就是微软的STRIDE 微软也提供了工具来做这个工作 Microsoft Threat Modeling Tool overview - Azur…

tictoc例子理解10-13

tictoc10-13tictoc 10 几个模块连接&#xff0c;发送消息直到模块3收到消息tictoc 11 新增信道定义tictoc 12 双向连接信息简化定义tictoc 10 几个模块连接&#xff0c;发送消息直到模块3收到消息 让我们用几个(n)’ tic’模块让它更有趣&#xff0c;并将每个模块连接到其他模…

基于Android的学生管理系统App设计与实现(Eclipse开发)

目 录 摘 要 I Abstract II 1 绪论 1 1.1 选题背景及意义 1 1.2 研究现状 1 1.2.1 教育系统发展现状 1 1.2.2 手机的应用市场发展现状 1 1.2.3 Android平台介绍 3 1.2.4 Android管理学生信息的意义 5 1.3.3 开发的环境及开发工具介绍 6 1.3 研究主要内容 6 2 相关技术介绍 7 2.…

安装 laravel 遇到的错误和解决方案

安装 laravel 遇到的错误和解决方案 纯粹是为了运行下 laravel&#xff0c;遇到了错误记录下&#xff0c;分享给需要的人。 下载 PHP Windows 版 &#xff0c;我选择的版本是 PHP 7.4 (7.4.33)。下载文件以后找个文件夹解压就可以了。Composer 安装&#xff0c;官网 。 勾选以…

单元测试与数据库

单元测试 1.单元测试应该是全自动执行的,而非交互式的,应使用assert语句来验证结果而不是sout后进行人眼验证 2.为了保证单元测试可靠且便于维护,单元测试用例之间不能互相调用 3.单元测试是可重复执行的,不能受到外界环境的影响 4.单元测试代买必须写在src/test/java的工程…

【JAVA程序设计】基于SpringBoot+VUE的高校疫情打卡系统-前后端分离

基于SpringBootVUE的高校疫情打卡系统零、项目获取一、项目简介二、开发环境三、项目技术四、系统架构五、运行截图六、数据库设计零、项目获取 获取方式&#xff08;点击下载&#xff09;&#xff1a;是云猿实战 项目经过多人测试运行&#xff0c;可以确保100%成功运行。 一…

【C++11重点语法】lambda表达式,初始化列表

目录 引子&#xff1a;C11为什么的源来 语法1&#xff1a;初始化列表 1.2.2 多个对象的列表初始化 语法3&#xff1a;默认成员函数控制&#xff08;delete&#xff0c;default&#xff09; 语法4&#xff1a;lambda表达式 引子&#xff1a;C11为什么的源来 在2003年C标准…

[附源码]计算机毕业设计springboot课室预约系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

用户体验设计笔记(1-1)

前言 ☔️只考虑体验的商业不可持续&#xff0c;只考虑商业的体验没有底线。         ☔️用户体验就是用户使用产品过程中积累起来的主管体验总和。 1 丨商业的天时&#xff1a;如何选择正确的体验策略&#xff1f; ☔️任何产品与服务&#xff0c;都是从用户场景的商业规…

小项目应该如何进行跨平台方案选型

作为一个小开发&#xff0c;近期完整的经历了&#xff0c;一个初创项目从搭建到推向市场的过程。实际上在整个过程中&#xff0c;开发只占很小的一个板块&#xff0c;尤其是对于我司这种初创型企业&#xff0c;人少钱少&#xff0c;每一分都得花到刀刃上&#xff0c;因此产品开…