博客
关于我
LeetCode 剑指 Offer 10- II. 青蛙跳台阶问题
阅读量:799 次
发布时间:2023-04-16

本文共 772 字,大约阅读时间需要 2 分钟。

为了解决这个问题,我们需要计算一只青蛙跳上 n 级台阶的总方法数。青蛙可以每次跳 1 级或者 2 级台阶。我们需要找到所有可能的跳法,并对结果取模 1e9+7。

方法思路

这个问题可以通过动态规划来解决。我们可以利用斐波那契数列的特性来简化计算,因为每次跳台阶的方法数等于前一次跳 1 级和前一次跳 2 级的方法数之和。

具体步骤如下:

  • 初始化两个变量 xy,分别表示跳到 n-2 级和 n-1 级的方法数。
  • 处理边界情况:当 n=0 或 n=1 时,返回 1;当 n=2 时,返回 2。
  • 对于 n>=3 的情况,使用循环从 3 到 n 计算每一步的方法数。
  • 每次循环中,更新 yx + y 并取模 1e9+7。
  • 返回最终的方法数 y
  • 解决代码

    int numWays(int n) {    const int mod = 1e9 + 7;    if (n < 2) return 1;    if (n == 2) return 2;    int x = 1, y = 2;    for (int i = 3; i <= n; ++i) {        int tmp = y;        y = (x + y) % mod;        x = tmp;    }    return y;}

    代码解释

  • 初始化常量:定义模数 mod 为 1e9+7。
  • 处理边界情况:当 n=0 或 n=1 时,直接返回 1;当 n=2 时,返回 2。
  • 循环计算:从 3 到 n 计算每一步的方法数。每次循环中,使用临时变量 tmp 存储旧的 y 值,然后更新 yx + y % mod
  • 返回结果:循环结束后,返回 y,即跳到 n 级台阶的总方法数。
  • 这种方法的时间复杂度是 O(n),空间复杂度是 O(1),非常高效。

    转载地址:http://rbgfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现异或加密(附完整源码)
    查看>>
    Objective-C实现异或密码算法(附完整源码)
    查看>>
    Objective-C实现异步编程(附完整源码)
    查看>>
    Objective-C实现弧度到度算法 (附完整源码)
    查看>>
    Objective-C实现循环移位(附完整源码)
    查看>>
    Objective-C实现循环链表(附完整源码)
    查看>>
    Objective-C实现循环队列算法(附完整源码)
    查看>>
    Objective-C实现循环队列链表算法(附完整源码)
    查看>>
    Objective-C实现快速傅立叶变换FFT算法(附完整源码)
    查看>>
    Objective-C实现快速傅里叶变换FFT(附完整源码)
    查看>>
    Objective-C实现快速傅里叶变换FFT(附完整源码)
    查看>>
    Objective-C实现快速排序(附完整源码)
    查看>>
    Objective-C实现快速排序(附完整源码)
    查看>>
    Objective-C实现快速排序算法(附完整源码)
    查看>>
    Objective-C实现恩尼格玛密码机算法(附完整源码)
    查看>>
    Objective-C实现感知哈希算法(附完整源码)
    查看>>
    Objective-C实现感知哈希算法(附完整源码)
    查看>>
    Objective-C实现截留雨水问题的动态编程方法算法(附完整源码)
    查看>>
    Objective-C实现截留雨水问题的蛮力方法的算法(附完整源码)
    查看>>
    Objective-C实现打印10000以内的完数(附完整源码)
    查看>>