剑指Offer第八和第九题:跳台阶和变态跳台阶以及拓展

2023-10-27

由于题目类似,这里总和一下,并进行拓展

目录

1.跳台阶

2.变态跳台阶

3.拓展篇——疯魔版跳台阶

题目一:

题目二:


1.跳台阶

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

题目分析:

一共n级,跳两级当n>2时,假设函数 f(n) 表示总共跳法数,那么此时下一级跳 1 级,剩下的跳法数就是 f(n-1),如果跳两级那么剩下就是 f(n-2);此时出现等式 f(n) = f(n-1) + f(n-2);问题就变成了斐波那契数列问题。

如不懂斐波那契数列问题,可看 https://blog.csdn.net/weixin_42513339/article/details/88927290,实际本质就是动态规划算法。

程序如下:

class Solution {
public:
    int jumpFloor(int number) {
        if(number == 0)
            return 0;
        else if(number == 1)
            return 1;
        else if(number == 2)
            return 2;
        else{
            int a1 = 1, a2 = 2,count = 2;
            while(count != number)
            {
                int m = a2;
                a2 = a1+a2;
                a1 = m;
                count++;
            }
            return a2;
        }
    }
};

递归版

class Solution {
public:
    int jumpFloor(int number) {
        if (number == 0) return 0;
        else if (number == 1) return 1;
        else if (number == 2) return 2;
        else
            return jumpFloor(number-2)+jumpFloor(number-1);			
    }  
};

 

2.变态跳台阶

题目描述

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

思路:

因为n级台阶,第一步有n种跳法:跳1级、跳2级、到跳n级

跳1级,剩下n-1级,则剩下跳法是f(n-1)

跳2级,剩下n-2级,则剩下跳法是f(n-2)

所以f(n)=f(n-1)+f(n-2)+...+f(1)

因为f(n-1)=f(n-2)+f(n-3)+...+f(1)

所以f(n)=2*f(n-1)

代码如下:

class Solution {
public:
    int jumpFloorII(int number) {
        if (number == 0) return 0;
		else if (number == 1) return 1;
		else{
			return 2 * jumpFloorII(number - 1);
		}
    }
};

 

3.拓展篇——疯魔版跳台阶

题目一:

有了前两个跳台阶的思想 ,我们可以再换个想法,假设题目如下:

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

思路:跟第一个思路很类似,只是不能跳1级,那么我们应该可以得到一个类似的公式,即:f(n) = f(n-2)+f(n-3),我们可以举例:

那么如果两级台阶,只有一种跳法。

如果三级台阶,只有一种跳法,如果四级台阶,那么也是只有一种跳法,如果是五级台阶,到了五级,我们终于用到上面的公式了,即 f(5) = f(3)+f(2); 我们再举例,如果六级,那么就是f(6) = f(4)+f(3),七级 f(7) = f(5) = f(4)等等,我们都可以用这个公式表示,所以代码就好写了。如下:

int jumpFloor3(int n) {
    if(n<=1) return 0;
    if(n==2 || n==3 || n==4)
        return 1;
    return jumpFloor3(n-2)+jumpFloor3(n-3);
}

题目二:

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

思路:还是改版题目,我们只需要写出 f(1) = 1, f(2) = 2, f(3) = 4,即可创建等式,即:f(n) = f(n-1)+f(n-2)+f(n-3)。

int jumpFloor4(int n) {
    if(n <= 0) return 0;
    if(n == 1) return 1;
    if(n == 2) return 2;
    if(n == 3) return 4;
    return  jumpFloor4(n-1)+jumpFloor4(n-2)+jumpFloor4(n-3);
}

类似题目有很多,主要还是需要熟悉这种递归方法,当然动态规划来做个人感觉好一点,青蛙跳台阶和斐波那契数列都是动态规划入门的题目,需要好好掌握,所以我这里多写了点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剑指Offer第八和第九题:跳台阶和变态跳台阶以及拓展 的相关文章

  • linux远程访问neo4j

    一 首先确保权限 看看能不能打开防火墙端口 我在搭建好了之后遇到了问题 WebSocket connection failure Due to security constraints in your web browser 尝试了几个方法
  • Linux中的read函数

    2023年7月11日 周二晚上 在 Linux 中 read 函数是一个系统调用 用于从文件描述符 file descriptor 中读取数据 头文件是unistd h 它的原型如下 include
  • 关于嵌入式人工智能?

    关于嵌入式人工智能 虽然学术界目前还没有嵌入式人工智能的确切定义 但随着人工智能的发展 势必会下沉到边缘 终端和嵌入式市场 嵌入式人工智能将会是未来几年AI发展的方向之一 并将伴随一系列的职位和角色涌现 最近很多小伙伴找我 说想要一些嵌入式
  • 基于STM32F103单片机的智能温室大棚RS485通信温湿度监测

    系统功能设计 末尾附文件 STM32单片机智能大棚485上传温湿度光照检测补光 本系统由STM32单片机RS485采集板和STM32单片机RS485显示按键板组成 采集板由STM32F103C8T6单片机 RS485通信模块 光照采集 温湿
  • springboot 一个项目中配置多个redis实例

    在实际的项目中 可能一个项目需要操作多个不同redis的数据 那么我们就需要做相应的配置 以下是基于springboot 首先在我们项目的 application proterties中添加如下配置 有几个就写几个 注意这里的命名 spri
  • 使用ffmpeg 命令分割视频方法

    用法说明 ss 起始时间 i 要分割的是频文件 t 分割时长 格式如下 可以是 t xx 单位 秒 或者 t 01 00 00 时 分 秒 注意 ss 要放在 i 之前 实例 ffmpeg ss 00 00 00 i Video 20210
  • JS实现翻译的多种方案

    JS实现翻译的多种方案 1 language js 库 https languages js org docs 适应于 React Angular 和 Vue2 需要时再学 import Languages from languages j
  • 分库分表实战(7):抽丝剥茧 — 千万级数据之sql优化下篇

    V X ruyuanhadeng获得600 页原创精品文章汇总PDF 前言 上一期 我们讲解了sql优化的一般流程 不管是优化join语句 where语句 聚合函数还是排序操作 核心在于利用索引来优化sql语句 但是 大家以为我们为字段创建
  • sonar报java.io.StreamCorruptedException: invalid internal transport message format, got (48,54,54,50)

    昨天运行sonar还好好的 今天运行就自动退出了 sonar log日志文件如下 gt Wrapper Started as Console Launching a JVM Wrapper Version 3 2 3 http wrappe

随机推荐

  • 蓝桥杯题库 历届试题部分(C++、Java)代码实现(31-45)

    文章目录 五 历届试题 PREV 31 小朋友排队 PREV 32 分糖果 PREV 33 兰顿蚂蚁 PREV 34 矩阵翻硬币 PREV 35 正则问题 PREV 36 包子凑数 PREV 37 分巧克力 PREV 38 油漆面积 PRE
  • LDO的六大重要参数,你务必一一牢记

    在电子设计中 我们经常需要用到不同的直流电压给不同器件供电 其中用的最广泛的就是通过LDO稳压芯片来实现得到不同的直流电压输出 因为成本低 性能好 且使用起来也很简单 让LDO稳压芯片用的也越来越多 几乎每款电子产品里都有其身影 说它好用
  • 【STM32】认识库函数引脚GPIO开启时钟,需要初始化的结构体GPIOMode_TypeDef

    GPIO Mode AIN 0x0 GPIO Mode IN FLOATING 0x04 GPIO Mode IPD 0x28 GPIO Mode IPU 0x48 GPIO Mode Out OD 0x14 GPIO Mode Out P
  • html安卓关闭输入面板,tabletpc输入面板关闭不了怎么办(tablet pc输入面板关闭方法)...

    平时在我们用到一些电脑中的小工具的时候可以快速的打开 大多数的情况下只要想关闭打开的面板 只需要关闭右上角的红色小叉就可以快速的关闭 tablet pc 输入面板这样关闭不了怎么解决 我们在使用这个小工具的时候通常会在任务栏中点击右键 在菜
  • Android 获取项目证书指纹MD5、SHA1、SHA256步骤详解

    前些天发现了一个蛮有意思的人工智能学习网站 8个字形容一下 通俗易懂 风趣幽默 感觉非常有意思 忍不住分享一下给大家 点击跳转到教程 第一步 首先找到Android studio依赖的本地JDK路径 第二步 找到路径输入cmd 第三步 输入
  • Restful风格详解

    Restful风格的描述与解释 转载 https www cnblogs com letsdaydayup p 14441123 html 文章目录 Restful风格的描述与解释 一 什么是Restful风格 二 Restful的特点 实
  • OpenHarmony 3D显示支持

    前言 OpenHarmony系统是一个非常先进 现代化设计理念的新系统其系统架构图如下 一 图形子系统架构图 图形子系统是最复杂的一个 标准版这里2D的部分 foundation graphic graphic 2d rosen modul
  • 流计算处理系统入门

    时间可以划分成两种 处理时间 数据抵达流计算系统开始进行处理的时间 数据被处理的时间 事件时间 被检测系统获得数据的时间 一般用时间戳的方式携带在数据中 处理时间 晚于 数据事件时间 流计算框架 Hadoop 批处理框架 采集的数据全存入H
  • xssgame第十一关至第十四关

    第十一关 首先查看源码 我们获得到新的t ref参数 这个参数有点像http的请求头的refer值 我们用bp抓包尝试在请求头refer输入值查看结果 打开bp 添加一条 Referer type text nm use ver alert
  • 目标检测中将已有的.xml数据集转换成.txt数据集(附代码,归一化后供YOLO格式使用)

    目标检测中将已有的 xml数据集转换成 txt数据集 附代码 归一化后供YOLO格式使用 1 新建项目 我新建了data目录并新建Annotations images ImageSets JPEGImages labels 五个文件夹 其中
  • 有限状态自动机

    1 什么是有限状态自动机 1 1什么是计算 维基百科定义 计算 英语 Calculation 是一种将 单一或多个的输入值 转换为 单一或多个的结果 的一种思考过程 可以简单理解为给出一个问题得到一个答案的过程 如下图所示日常生活比较常见计
  • 【问题解决】glob.glob 如何匹配所有子文件夹下的文件 —— recursive=True

    一 仅匹配一级目录下的文件 import glob label dir data part1 dir1 txt datas glob glob label dir print datas gt gt gt data part1 dir1 0
  • Java中的类、对象以及方法简单定义与参数传递

    目录 一 类和对象的概念 二 方法 一 类和对象的概念 对象 现实世界中客观存在的物体都是对象 具有属性和方法 其中属性描述对象的特征 方法描述对象的行为 类 具有相同属性和方法的多个对象的集合 类是对对象的抽象 对象是类的具体 类是创建对
  • 关于安装pytorch、cuda对应GPU显卡算力问题(记录贴)

    贴几个链接 ngc pytorch容器版本对应关系 CUDA Toolkit版本及可用PyTorch对应关系 NVIDIA英伟达GPU显卡算力表 总结 安装torch时会安装对应的cuda版本 目前来看cuda10对应的是7 5的算力 适用
  • LLVM基本概念入门

    入职新公司以后 开始着手基于LLVM开发编译器 之前在前东家那里主要做gcc的开发 所以也算是有点基础 但拿到LLVM后 除了知道clang a c o a之外 好像其他的都有点差异 现在经过了小一个月的学习 也算有点收获 因为网上关于LL
  • 抖音矩阵系统-60+自媒体平台一键发布-短视频获客系统

    当老板做企业的 想在抖音上做生意的 一定一定要开通蓝V企业号线索版来做矩阵 看看我每天的线索都是999 客服都接待不过来 现在还有300个客资未分配 抖音都在推了企业员工号的玩法 你还在质疑什么 在抖音上做矩阵 真的能将你的生意放大100倍
  • rabbitmq使用mqtt协议

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 rabbitmq是什么 二 mqtt协议是什么 三 配置步骤 1 启用 rabbitmq的mqtt协议 2 mqtt 客户端依赖包 总结 前言 在网上学习
  • JavaScript undefined 属性

    定义和用法 undefined 属性用于存放 JavaScript 的 undefined 值 语法 undefined 说明 无法使用 for in 循环来枚举 undefined 属性 也不能用 delete 运算符来删除它 undef
  • linux各文件夹的作用是什么,linux各目录的作用

    关键字 linux 目录 linux各目录的作用 linux下的文件结构 看看每个目录都是干吗用的 bin 二进制可执行命令 dev 设备特别文件 etc 系统管理和设置文件 etc rc d 启动的设置文件和脚本 home 用户主目录的基
  • 剑指Offer第八和第九题:跳台阶和变态跳台阶以及拓展

    由于题目类似 这里总和一下 并进行拓展 目录 1 跳台阶 2 变态跳台阶 3 拓展篇 疯魔版跳台阶 题目一 题目二 1 跳台阶 题目描述 一只青蛙一次可以跳上1级台阶 也可以跳上2级 求该青蛙跳上一个n级的台阶总共有多少种跳法 先后次序不同