【LeetCode】剑指 Offer 10- II. 青蛙跳台阶问题 p77 -- Java Version

news2025/2/26 6:01:22

题目链接:https://leetcode.cn/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/

1. 题目介绍(10- II. 青蛙跳台阶问题)

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

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

【测试用例】:
示例 1:

输入:n = 2
输出:2

示例 2:

输入:n = 7
输出:21

示例 3:

输入:n = 0
输出:1

【条件约束】:

提示:

  • 0 <= n <= 100

2. 题解

在这里插入图片描述

2.1 循环求余法 – O(n)

时间复杂度O(n),空间复杂度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;
    }
}

2.2 动态规划 – O(n)

时间复杂度O(n),空间复杂度O(n)
在这里插入图片描述
动态规划法在求解子问题时,会保存该子问题的解,后面的子问题求解时,可以直接拿来计算,这无疑是要比递归的效率高上很多。

class Solution {
    static final int MOD = 1000000007;
    public int numWays(int n) {
         if (n <= 1) {
            return 1;
        }
        
        int[] dp = new int[n + 1];
        dp[1] = 1;
        dp[2] = 2;

        for (int i = 3; i <= n; i++) {
            dp[i] = (dp[i - 1] + dp[i - 2]) % MOD;
        }
        return dp[n];
    }
}

3. 变形:变态版跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
参考上述思路: 此时青蛙跳上第n级台阶的方法数:

在这里插入图片描述

f(n)=f(n-1)+f(n-2)+f(n-3)+···+f(2)+f(1)+1[1是直接一次跳到n级]
f(n-1)=f(n-2)+f(n-3)+f(n-4)+···+f(2)+f(1)+1,可得:
f(n)=2*f(n-1),所以这是一个等比数列, 可得f(n)=2^(n-1)

// 非递归实现
public static int JumpFloorII(int target) {
    if(target == 0) return 0;
    if(target == 1) return 1;
    int a = 1;
    while (target > 1){
        a = 2*a;
        target--;
    }
    return a;
}

// 递归实现
public static int JFII(int target){
    if(target == 0) return 0;
    if(target == 1) return 1;
    return 2*JumpFloorII(target-1);
}

4. 参考资料

[1] 【LeetCode】No.70. Climbing Stairs – Java Version – 相同题目
[2] 【LeetCode】剑指 Offer 10- I. 斐波那契数列 p74 – Java Version – 相同题目
[3] 【LeetCode】剑指 Offer 10- Ⅲ. 矩形覆盖 p79 – Java Version – 相同题目
[4] 面试题10- II. 青蛙跳台阶问题(动态规划,清晰图解)-- 部分解题思路和图片来源

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

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

相关文章

采购评标管理过程是怎样的?有哪些评标标准?

采购活动的评标是检查和比较投标的有组织的过程&#xff0c;以选择最佳报价&#xff0c;努力获得实现企业目标所需的货物、工程和服务。 评标是由一个被称为评标小组的机构负责。这个小组如何称呼&#xff0c;取决于企业的情况。同义词有报价审查小组、投标审查委员会或投标审…

在ONLYOFFICE中借助ChatGPT一键创建招聘启事的内容

大家好&#xff0c;相信和多人都在生活中或工作中看到过招聘启示&#xff0c;或多或少都会有些了解。今天教大家在ONLYOFFICE中怎样通过chetGPT创建一份满意的招聘启示&#xff0c;下面是我用chatgpt制作的一份招聘信息&#xff0c;请大家看一下。 ONLYOFFICE ONLYOFFICE文档是…

从0到1实现单机记账APP原理与细节uniApp内含源码 (一)

单机记账APP演示及源码 具体演示如下面视频所示。免费下载地址&#xff1a;点击进入 预览APP&#xff08;内含开屏广告&#xff09;下载地址&#xff1a;http://8.142.10.182:8888/down/aWHWeGaEQE2W.apk 服务器买的便宜&#xff0c;带宽很小所以下载速度慢&#xff0c;主要还…

mathtype7.0最新版安装下载及使用教程

MathType是一款专业的数学公式编辑器&#xff0c;理科生专用的必备工具&#xff0c;可应用于教育教学、科研机构、工程学、论文写作、期刊排版、编辑理科试卷等领域。2014年11月&#xff0c;Design Science将MathType升级到MathType 6.9版本。在苏州苏杰思网络有限公司与Design…

APP任务模块功能借助php-resque实现业务解耦

先上设计图 说明&#xff1a;任务模块分一次性任务和每日任务&#xff0c;可能还包括男女用户任务区分 处理步骤&#xff1a; 一、同步任务数据库 1.1、任务列表数据库 1.2、完成任务数据库 二、搭建即时消息队列 一、composer require resque/php-resque二、因为服务器red…

数据结构:栈和队列(Leetcode20. 有效的括号+225. 用队列实现栈+232. 用栈实现队列)

目录 一.数据结构--栈 1.栈的基本介绍 2.栈的实现 二.数据结构--队列 1.队列的基本介绍 2.队列的实现 三.栈的运用(Leetcode20. 有效的括号225) 1.问题描述 2.问题分析 题解代码&#xff1a; 四.用两个队列实现栈(225. 用队列实现栈 - 力扣&#xff08;Leetcode&a…

Talk | 清华大学交叉信息研究院助理教授杜韬:利用计算方法探究流固耦合

本期为TechBeat人工智能社区第474期线上Talk&#xff01; 北京时间2月15日(周三)20:00&#xff0c;清华大学交叉信息研究院助理教授——杜韬的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “利用计算方法探究流固耦合”&#xff0c;届时将介绍流固…

Windows10使用-处理IE自动跳转至Edge

文章目录 前言一、调整Edge二、调整Internet选项三、搜索栏的恢复总结前言 微软官方宣布,自2023年2月14日永久停止支持Internet Explorer 11浏览器。后期点击IE 图标将会自动跳转到Edge界面。对于一些网站,可能需要使用IE模式才能正常使用,这时候就需要做相应的调整,才能够…

做外贸怎么找客户

现在国内贸易内卷非常严重&#xff0c;很多商家都转向海外市场了&#xff0c;总结而言&#xff0c;目前所有做外贸的人&#xff0c;核心的点就是要找到重点意向客户&#xff0c;今天就和大家分享一下目前市面上外贸找客户的几种方法。主动出击式开发外贸客户1、参加展会找外贸客…

使用拦截器实现登录状态检测(以及在注册拦截器类时要使用ioc中的拦截器类)

拦截器 preHandler(HttpServletRequest request, HttpServletResponse response, Object handler) 方法在请求处理之前被调用。该方法在 Interceptor 类中最先执行&#xff0c;用来进行一些前置初始化操作或是对当前请求做预处理&#xff0c;也可以进行一些判断来决定请求是否…

C++类和对象-继承多态

继承 继承是面向对象三大特性之一 定义类时&#xff0c;下级别的成员除了拥有上一级的共性&#xff0c;还有自己的特性&#xff0c;就可以考虑使用继承的技术&#xff0c;减少代码的重复 继承的基本语法 语法&#xff1a;class 子类 : 继承方式 父类 子类也被成为派生类父类…

FreeRTOS队列

队列简介队列是一种任务到任务&#xff0c;任务到中断&#xff0c;中断到任务数据交流得一种机制。在队列中可以存储数量有限&#xff0c;大小固定得多个数据&#xff0c;队列中的每一个数据叫做队列项目&#xff0c;队列能够存储队列项目的最大数量称为队列的长度&#xff0c;…

生活中常见标识

一维码 一维条码即指条码条和空的排列规则,常用的一维码的码制包括:EAN码、39码、交叉25码、UPC码、128码、93码,ISBN码,及Codabar(库德巴码)等。 常见场景: - 快销品- 常用五金- 通讯设备其中蕴含的信息就是条码的****一串数字 二维码 常见场景

性能测试中,我遇到的8个常见问题总结

性能压测中我们需要明白以下几点&#xff1a; 1、好的开始是成功的一半&#xff0c;前期的准备非常重要&#xff1b; 2、过程中&#xff0c;关注每个细节&#xff0c;多个维度监控&#xff1b; 3、在调优中多积累经验&#xff1b; 4、对结果负责&#xff0c;测试报告要清晰…

Redis实战案例

文章目录1、SpringBoot整合Redis1.1、新建项目1.2、接口编写1.3、集成Redis1.3、测试1.4、序列化问题2、Redis实现分布式缓存2.1、背景介绍2.2、代码编写2.3、缓存改造2.4、小结3、RedisAOP自定义注解&#xff0c;优雅实现分布式缓存3.1、自定义注解3.2、AOP切面类3.3、测试3.4…

跳跃游戏II-力扣45-java 动态规划

一、题目描述给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处:0 < j < nums[i] i j < n返回到达 nums[n - …

手撸一个Table组件(Table组件不过如此)

一、前言 手写Table组件这个文章我一直都想写&#xff0c;今天终于得空来写它了。小编认为Table组件是组件库里"较为复杂"的一个组件&#xff0c;因为它的扩展性非常强&#xff0c;并且它的基础样式如何去写都非常考究&#xff0c;那么今天我就带大家来实现一个基础…

SpringBoot整合Spring Security过滤器链加载执行流程源码分析

文章目录1.引言2.Spring Security过滤器链加载1.2.注册名为 springSecurityFilterChain的过滤器2、查看 DelegatingFilterProxy类3.查看 FilterChainProxy类3.1 查看 doFilterInternal方法。3.2 查看 getFilters方法。4 查看 SecurityFilterChain接口5 查看 SpringBootWebSecur…

JDK8增加的特性

Java知识点总结&#xff1a;想看的可以从这里进入 目录13、JDK8增加的特性13.1、Lambda表达式13.2、方法的引用13.3、时间处理类13.4、接口增加方法13.5、注解新增13.6、Optional类13.7、Stream13、JDK8增加的特性 13.1、Lambda表达式 Lambda表达式和方法的引用 13.2、方法的…

Java8的Optional类的使用 和 Stream流式操作

Java知识点总结&#xff1a;想看的可以从这里进入 目录13.6、Optional类13.7、Stream13.7.1、Stream创建13.7.2、中间操作1、筛选2、切片3、映射4、排序13.7.3、终止操作1、遍历2、聚合3、匹配查找4、归约5、收集归集统计分组字符串拼接归约13.6、Optional类 Optional类是一个…