入口

力扣https://leetcode.cn/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/

题目描述

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

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

示例 1:

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

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

输入:n = 0
        输出:1
提示:

0 <= n <= 100

斐波那契数列

青蛙跳台阶问题是一种经典的动态规划问题,可以通过类比斐波那契数列来求解。问题的关键在于理解青蛙跳跃的可能路径:

  • 第1级台阶:只有 1 种方法,即青蛙直接跳1级到达目标。

  • 第2级台阶:有 2 种方法

    1. 跳1级,然后再跳1级:青蛙可以选择先跳到第1级台阶,然后再跳1级到第2级。
    2. 直接跳2级:青蛙可以选择直接从地面跳到第2级。
  • 第n级台阶(n > 2):对于任意第n级台阶,青蛙有两种可能的最后一步:

    1. 从第(n-1)级台阶跳1级:青蛙可以先跳到第(n-1)级台阶,然后再跳1级到达第n级。
    2. 从第(n-2)级台阶跳2级:青蛙可以先跳到第(n-2)级台阶,然后直接跳2级到达第n级。

这个思路的核心在于,每个台阶的到达方法数是基于前两个台阶的方法数之和,因为青蛙可以选择跳1级或者2级。

递推公式:F(n) = F(n-1) + F(n-2)

方法一:递归

Java示例

class Solution {
public int climbStairs(int n) {
if(n==1 || n==2){
return n;
}
return climbStairs(n-1) + climbStairs(n-2);
}
}

时间复杂度:O(2^n)

空间复杂度:O(n)

方法二:记忆递归

方法一缺点: 多了很多重复计算(如红框圈出来的地方),记忆递归的讲每次计算结果存储,不再重复计算。

方法一复杂度分析

Java示例

class Solution {
public int climbStairs(int n) {
int memo[] = new int[n+1];//存储计算结果
return climb(memo,n);
}
public int climb(int[] memo,int n){
if(n==1 || n==2){
memo[n] = n;
}
if(memo[n] == 0){
memo[n] = climb(memo,n-1) + climb(memo,n-2);
}
return memo[n];
}
}

时间复杂度:O(n)

空间复杂度:O(n)

方法三:动态规划

Java示例

class Solution {
public int climbStairs(int n) {
if(n==1 || n==2){
return n;
}
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];
}
return dp[n-1] + dp[n-2];
}
}

时间复杂度:O(n)

空间复杂度:O(n)

方法四:斐波那契数列

在方法一的dp数组中只有两个元素被使用,现在将浪费的空间优化掉,将空间复杂度降为O(1)

Java示例

class Solution {
public int climbStairs(int n) {
if(n==1 || n==2){
return n;
}
int first=1;
int second = 2;
for(int i=3;i<n;i++){
int third = first + second;
first = second;
second = third;
}
return first + second;
}
}

时间复杂度:O(n)

空间复杂度:O(1)

[每日算法 - 华为机试] 剑指 Offer 10- II. 青蛙跳台阶问题的更多相关文章

  1. 【剑指Offer】10- II. 青蛙跳台阶问题 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人微信公众号:负雪明烛 目录 题目描述 解题方法 动态规划 日期 题目地址:https: ...

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

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008, ...

  3. 剑指Offer - 九度1388 - 跳台阶

    剑指Offer - 九度1388 - 跳台阶2013-11-24 03:43 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 输入: 输入可能包 ...

  4. 【剑指offer】09-3变态跳台阶

    原创博文,转载请注明出处! # 本文是牛客网<剑指offer>刷题笔记,笔记索引连接 1.题目 # 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的 ...

  5. 剑指offer 09:变态跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. /* f(n-1) = f(n-2) + f(n-3) + ... + f(0 ...

  6. 剑指offer(8)跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 题目分析 题目很简单,稍微分析就知道这是斐波那契数列,所以可以动态规划来做 a.如果两种跳法,1阶 ...

  7. 剑指offer九之变态跳台阶

    一.题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 二.思路 1.关于本题,前提是n个台阶会有一次n阶的跳法.分析如下: f(1) ...

  8. 【剑指Offer】8、跳台阶

      题目描述:   一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果).   解题思路:   首先考虑最简单的情况,如果只有1级台阶, ...

  9. 剑指offer 11:变态跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   解法:使用数学归纳法可得,跳n级台阶的跳法一共有f(n)=2n-1中,即本 ...

  10. 剑指offer【09】- 跳台阶

    题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 对于本题,前提只有 一次 1阶或者2阶的跳法. a.如果两种跳法,1阶或者 ...

随机推荐

  1. MCU命令

    三D打印常用MCU命令 allocate_oids count=42 分配 42 个 OIDs,后续用于标识和管理不同的设备或组件 config_spi oid=0 pin=PD7 cs_active ...

  2. [.NET] API网关选择:YARP还是Ocelot?

    API网关选择:YARP还是Ocelot? 摘要 随着微服务架构的流行,API网关在系统架构中扮演着越来越重要的角色.在.NET生态中,YARP(Yet Another Reverse Proxy)和 ...

  3. 关于前端url实现下载文件

    首先关于前端下载肯定会想到a链接,但是我在使用的时候发现a标签会打开这个网址而不是下载文件,所以我发现了一个好的方法,感觉不错,来分享一下 话不多说,上代码 // 下载文件 _downLoad(url ...

  4. Diary & Solution Set - 多校度假

    目录 \(\mathscr{Summary}\sim6.14\) \(\mathscr{Contest}\) \((3/3)\) \(\mathscr{A}.\) 区间第 \(k\) 小 \(\mat ...

  5. Angular-教程

    https://www.runoob.com/angularjs/angularjs-tutorial.html https://www.runoob.com/angularjs2/angularjs ...

  6. PICO 避坑指南

    1. Win10 不需要串口驱动,使用PICO W之前先刷固件pico w的固件 micropython-firmware-pico-w-290622.rar 刚开始 刷的固件不对,一直无法识别串口. ...

  7. 原生js元素拖动效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. APSI - 1

    最近在看[Labeled PSI from Homomorphic Encryption with Reduced Computation and Communication]的论文,看完后头大,现结 ...

  9. Linux:GPU

    什么是GPU? CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景.CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处 ...

  10. Vanity Intermediate 统配符提权

    nmap扫描 ┌──(root㉿kali)-[~] └─# nmap -p- -A 192.168.167.234 Starting Nmap 7.94SVN ( https://nmap.org ) ...