LeetCode算法动态规划—剑指 Offer 10- II. 青蛙跳台阶问题

目录

[剑指 Offer 10- II. 青蛙跳台阶问题](#剑指 Offer 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

题解:

多少种可能性 的题目一般都有递推性,即 f(n) 和 f(n−1)...f(1)之间是有联系的。

首先,我们假设跳上 n 级台阶有 f(n) 种跳法。对于青蛙的最后一步,只有两种情况:跳上 1 级或 2 级台阶。

  • 如果最后一步跳上 1 级台阶,剩下 n-1 级台阶,共有 f(n-1) 种跳法。
  • 如果最后一步跳上 2 级台阶,剩下 n-2 级台阶,共有 f(n-2) 种跳法。

因此,f(n) = f(n-1) + f(n-2),即跳上 n 级台阶的跳法数等于跳上 n-1 级台阶的跳法数加上跳上 n-2 级台阶的跳法数,这正是斐波那契数列的递推性质

起始条件:

  • 青蛙跳台阶问题: f(0)=1, f(1)=1, f(2)=2;
  • 斐波那契数列问题: f(0)=0, f(1)=1, f(2)=1。

青蛙跳台阶问题中,f(0) = 1 表示当没有台阶时,青蛙已经在终点上,因此只有一种跳法。 而在斐波那契数列问题中,f(0) = 0 表示斐波那契数列的第一项为 0。

代码:

java 复制代码
class Solution {
    public int numWays(int n) {
        if(n<2) return 1;
        int p=0,q=1,r=1;
        for(int i=2;i<=n;i++){
            p=q;
            q=r;
            r=(p+q)%1000000007;
        }
        return r;
    }
}

运行结果:

相关推荐
Q741_1477 分钟前
每日一题 力扣 3655. 区间乘法查询后的异或 II 模拟 分治 乘法差分法 快速幂 C++ 题解
c++·算法·leetcode·模拟·快速幂·分治·差分法
The_Ticker8 分钟前
印度股票实时行情API(低成本方案)
python·websocket·算法·金融·区块链
夏乌_Wx12 分钟前
剑指offer | 2.4数据结构相关题目
数据结构·c++·算法·剑指offer·c/c++
AI成长日志1 小时前
【笔面试算法学习专栏】哈希表基础:两数之和与字母异位词分组
学习·算法·面试
abant21 小时前
leetcode 239 单调队列 需要一些记忆
算法·leetcode·职场和发展
漫霂1 小时前
二叉树的统一迭代遍历
java·算法
炽烈小老头1 小时前
【每天学习一点算法 2026/04/08】阶乘后的零
学习·算法
Mr_Xuhhh1 小时前
算法刷题笔记:从滑动窗口到哈夫曼编码,我的算法进阶之路
开发语言·算法
MicroTech20252 小时前
突破虚时演化非酉限制:MLGO微算法科技发布可在现有量子计算机运行的变分量子模拟技术
科技·算法·量子计算
hssfscv2 小时前
软件设计师下午题六——Java的各种设计模式
java·算法·设计模式