JZ71 变态跳台阶

img

😀前言
本文探讨了一个有关青蛙跳台阶的变体问题,与传统的台阶跳跃不同,这只青蛙每次可以跳上任意多的台阶。我们需要解决的问题是:对于给定的台阶数,计算青蛙跳上该台阶的所有可能方法。本文将通过动态规划和数学推导两种方法来解决这个问题,并进一步优化算法以满足空间和时间复杂度的进阶要求。

🏠个人主页:尘觉主页

文章目录

  • 变态跳台阶
    • 题目链接
      • 描述
      • 示例1
      • 示例2
    • 题目描述
    • 解题思路
        • 动态规划
      • 数学推导
      • 进阶
    • 😄总结

变态跳台阶

题目链接

牛客网

描述

这个问题描述了一只青蛙跳上台阶的情景,不同之处在于这只青蛙每次可以跳上任意多的台阶。具体来说,它一次可以跳上1级台阶,也可以跳上2级,或者跳上n级。我们需要计算出跳上一个n级的台阶总共有多少种跳法。

数据范围:1≤𝑛≤201≤n≤20

进阶:空间复杂度 𝑂(1)O(1) , 时间复杂度 𝑂(1)O(1)

示例1

输入:3

输出:4

示例2

输入:1

输出:1

题目描述

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

cd411a94-3786-4c94-9e08-f28320e010d5

解题思路

动态规划

动态规划是一种常用的解题思路,适用于解决具有重叠子问题和最优子结构性质的问题。对于这个问题,我们可以使用动态规划来求解。

我们定义一个数组dp,其中dp[i]表示跳上第i级台阶的跳法总数。初始时,我们将dp数组全部初始化为1,因为青蛙跳上第0级台阶只有一种方式,即不跳。然后,我们从第1级台阶开始,依次计算跳上每级台阶的跳法总数。具体来说,对于第i级台阶,它可以从第0级、第1级、…、第i-1级台阶跳上来,所以跳上第i级台阶的跳法总数等于跳上第0级到第i-1级台阶的跳法总数之和。最后,返回dp[target - 1]即可。

public int jumpFloorII(int target) {int[] dp = new int[target];Arrays.fill(dp, 1);for (int i = 1; i < target; i++)for (int j = 0; j < i; j++)dp[i] += dp[j];return dp[target - 1];
}

数学推导

除了动态规划外,我们还可以通过数学推导来解决这个问题。假设青蛙跳上第n级台阶的跳法总数为f(n),我们可以观察到以下规律:

  • 跳上n-1级台阶,可以从n-2级台阶跳1级上去,也可以从n-3级台阶跳2级上去,以此类推,直到从第0级台阶跳n-1级上去。
  • 同样,跳上n级台阶,可以从n-1级台阶跳1级上去,也可以从n-2级台阶跳2级上去,以此类推,直到从第0级台阶跳n级上去。

基于上述观察,我们可以得到以下等式:

跳上 n-1 级台阶,可以从 n-2 级跳 1 级上去,也可以从 n-3 级跳 2 级上去…,那么

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

同样,跳上 n 级台阶,可以从 n-1 级跳 1 级上去,也可以从 n-2 级跳 2 级上去… ,那么

f(n) = f(n-1) + f(n-2) + ... + f(0)

综上可得

f(n) - f(n-1) = f(n-1)

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

所以 f(n) 是一个等比数列

public int JumpFloorII(int target) {return (int) Math.pow(2, target - 1);
}

进阶

本题还要求实现进阶要求,即空间复杂度为𝑂(1),时间复杂度为𝑂(1)。对于这个要求,我们可以利用数学推导得到的结果,直接使用指数函数计算跳法总数,从而实现较低的空间复杂度和时间复杂度。

😄总结

在本文中,我们通过动态规划和数学推导两种方法解决了青蛙跳台阶的变体问题。首先,我们使用动态规划构建了一个数组来记录跳上每级台阶的跳法总数,然后通过迭代计算得到结果。接着,我们利用数学推导得到的等比数列关系,直接使用指数函数计算跳法总数,以实现更低的空间和时间复杂度。最终,我们成功实现了对于给定台阶数的青蛙跳跃方法的高效计算,满足了进阶要求。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

img

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

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

相关文章

python模拟浏览器读取考试题目、答案,导出到EXCEL表中

本实例网页中的题干&#xff0c;类似于“单选题11&#xff1f;&#xff08;1.0分&#xff09;”所以用[3:]去除前3个汉字。再用正则去掉最后一对括号及里面的内容。 本实例网页中的选项&#xff0c;类似于 ”A、2“ ”B、3“ 用[2:]去除前2个字符 from DrissionPage import Ch…

Python中的`next()`函数:深入解析与应用

引言 在Python编程中&#xff0c;迭代是处理数据集合的基础操作。我们熟悉使用for循环和while循环来进行迭代&#xff0c;但你是否知道Python中还提供了一个名为next()的内建函数&#xff0c;它可以用来迭代数据流中的元素&#xff1f;本文将带你深入了解next()函数的工作原理…

OPENAI中Semantic Kernel实现原理以及示例代码用PYTHON来实现

OPENAI中Semantic Kernel实现原理以及示例代码用PYTHON来实现 前言 在人工智能领域&#xff0c;自然语言处理是一个非常重要的研究方向。而在自然语言处理中&#xff0c;语义理解是一个非常关键的问题。在这个领域中&#xff0c;OPENAI的Semantic Kernel是一个非常有名的工具…

如何获得一个Oracle 23ai数据库(Virtual Appliance)

准确的说&#xff0c;是Oracle 23ai Free Developer版&#xff0c;因为企业版目前只在云上&#xff08;OCI和Azure&#xff09;和ECC上提供。 方法包括3种&#xff0c;本文介绍第1种&#xff1a; Virtual ApplianceRPM安装Docker 从此处下载虚拟机。 可以看到虚拟机需要4G内…

费马小定理详解

费马小定理 定义&#xff1a; 设 p 为素数&#xff0c;a 为整数&#xff0c;则 a p ≡ a ( m o d p ) a^p \equiv a\ (\mod p) ap≡a (modp) &#xff0c;若 p ∤ a p \nmid a p∤a &#xff0c;则 a p − 1 ≡ 1 ( m o d p ) a^{p-1} \equiv 1\ (\mod p) ap−1≡1 (modp)…

力扣437. 路径总和 III

Problem: 437. 路径总和 III 文章目录 题目描述思路复杂度Code 题目描述 思路 1.定义int类型函数rootSum(root, targetSum)&#xff0c;用于求取每一个节点等于目标函数的路径数&#xff1a; 1.1.易知rootSum(root, targetSum)求出的数量等于rootSum(root.left, targetSum - va…

代码随想录算法训练营第36期DAY21

DAY21 513找树左下角的值 自己写的&#xff0c;过了&#xff08;注意到层序遍历中&#xff0c;que队头存的是最左边的节点&#xff0c;再写一个getheight函数控制最大高度就好&#xff09;。待会看解析&#xff0c;掌握迭代、递归。 优化迭代法&#xff1a;不用找最大深度&am…

2024年4月17日华为春招实习试题【三题】-题目+题解+在线评测,2024.4.17,华为机试

2024年4月17日华为春招实习试题【三题】-题目题解在线评测 &#x1f52e;题目一描述&#xff1a;扑克牌消消乐输入描述输出描述样例一样例二Limitation解题思路一&#xff1a;模拟&#xff0c;遇到连续3张相同牌号的卡牌&#xff0c;直接删除解题思路二&#xff1a;栈解题思路三…

Scala里的class、object、case class、case object 、trait

Class&#xff08;类&#xff09; 定义和作用 Scala 中的 class 是一种蓝图&#xff0c;用于创建对象&#xff08;实例&#xff09;。它定义了对象的状态和行为。类可以包含字段&#xff08;属性&#xff09;和方法&#xff08;函数&#xff09;。类可以有构造器&#xff0c;…

Tarjan算法模板

一、最近公共祖先&#xff08;LCA&#xff09; LCA&#xff1a;Least Common Ancestor P3379 【模板】最近公共祖先&#xff08;LCA&#xff09; #include <bits/stdc.h>using namespace std; typedef long long ll;ll quickin(void) {ll ret 0;bool flag false;cha…

【notepad++】使用

1 notepad 下载路径 https://notepad-plus.en.softonic.com/download 2 设置护眼模式 . 设置——语言格式设置——前景色——黑色 . 背景色——RGB &#xff1a;199 237 204 . 勾选“使用全局背景色”、“使用全局前景色” . 保存并关闭

2009-2022年上市公司华证ESG评级评分数据(含细分项)

2009-2022年上市公司华证ESG评级评分数据&#xff08;含细分项&#xff09; 1、时间&#xff1a;2009-2022年 2、来源&#xff1a;华证ESG 3、指标&#xff1a;证券代码、证券简称、综合评级、年度、综合得分、E评级、E得分、S评级、S得分、G评级、G得分 4、范围&#xff1…

PXE 批量安装部署

目录 一、PEX批量部署优点 二、PXE&#xff1a;预启动执行环境 三、搭建PXE远程服务器 要想全自动安装 接下来请看步骤&#xff1a; 一、PEX批量部署优点 规模化&#xff1a;同时装配多台服务器自动化&#xff1a;安装系统 配置各种服务远程实现&#xff1a;不需要光盘&…

Buuctf-Misc题目练习

打开后是一个gif动图&#xff0c;可以使用stegsolve工具进行逐帧看。 File Format:文件格式 Data Extract:数据提取 Steregram Solve:立体试图 可以左右控制偏移 Frame Browser:帧浏览器 Image Combiner:拼图&#xff0c;图片拼接 所以可以知道我们要选这个Frame Browser …

编程新伙伴:如何利用ChatGPT提升代码编写效率

编程是一项既需要逻辑思维又需要创造性的技术活动。而现在&#xff0c;ChatGPT&#xff0c;一款由OpenAI研发的人工智能&#xff0c;可以帮助你更高效地编写代码。这款AI工具被设计成理解和产生人类的自然语言&#xff0c;现在也得以应用于编程领域。那么&#xff0c;ChatGPT如…

SQL查询语句(二)逻辑运算关键字

上一篇文章中我们提到了条件查询除了一些简单的数学符号之外&#xff0c;还有一些用于条件判断的关键字&#xff0c;如逻辑判断 关键字AND,OR,NOT和范围查找关键字BETWEEN,IN等&#xff1b;下面我们来介绍一些这些关键字的用法以及他们所表达的含义。 目录 逻辑运算关键字 AND…

在K8S中,集群可以做哪些优化?

在Kubernetes&#xff08;简称K8s&#xff09;集群中&#xff0c;可以进行多种优化以提升性能、稳定性和资源利用率。以下是一些常见的优化措施&#xff1a; 控制面组件优化&#xff1a; kube-apiserver 高可用与扩展&#xff1a;通过配置多个API服务器实例并使用负载均衡器分发…

用户管理中心——数据库设计用户注册逻辑设计

用户管理中心——数据库设计&用户注册逻辑设计 规整项目目录1. 数据库自动生成器的使用实现基本的数据库操作&#xff08;操作user表&#xff09; 2. 注册逻辑的设计(1) 写注册逻辑(2) 实现(3) 测试代码 3. 遇到的问题 规整项目目录 utils–存放工具类&#xff0c;比如加密…

信息系统架构基本概念及发展_1.概述和发展

信息系统架构&#xff08;Information Systems Architecture&#xff0c;ISA&#xff09;是一种体系结构&#xff0c;它反映了一个政府、企业或事业单位信息系统的各个组成部分之间的关系&#xff0c;以及信息系统与相关业务&#xff0c;信息系统与相关技术之间的关系。 1.信息…

leetCode33. 搜索旋转排序数组

leetCode33. 搜索旋转排序数组 题目思路 此题的特点是&#xff1a;排好序循环的数组&#xff1a;特点&#xff1a;可以分为两个区间&#xff0c;一半升序&#xff0c;一半降序&#xff0c;或者全部升序 我们可以用二分法&#xff0c;找出升序 到降序的那个临界值&#xff0c;并…