我是靠谱客的博主 勤劳八宝粥,最近开发中收集的这篇文章主要介绍剑指 Offer 10- II. 青蛙跳台阶问题 C++,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目链接

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

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

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

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

示例 3:

输入:n = 0 输出:1

设跳上 n 级台阶有 f(n) 种跳法。跳到第 n 级有两种情况,

  1. 从第 n-1 级台阶跳上来 跳到第 n-1 级台阶有 f(n-1) 种跳法
  2. 从第 n-2 级台阶跳上来 跳到第 n-2 级台阶有 f(n-2) 种跳法

*f(n)*为以上两种情况之和,即 f(n)=f(n−1)+f(n−2),这就与斐波那契数列的转态转移方程相同了。所以可转化为 求斐波那契数列第 n 项的值 ,与 剑指 Offer 10- I. 斐波那契数列做法相同,只是起始数字不同。
由 F(N) = F(N - 1) + F(N - 2) 可知, 只需三个变量, 即可完成迭代求解. 迭代求解的过程 相当于将这三个数每次向后平移一个位置,

011235
resa1a2
resa1a2
resa1a2
int numWays(int n) {
        int res = 1, a1 = 1, a2 = 0;
        for(int i = 0; i < n; ++i){
            a2 = (res + a1) % 1000000007;
            res = a1;
            a1 = a2;
        }
        return res;
    }

最后

以上就是勤劳八宝粥为你收集整理的剑指 Offer 10- II. 青蛙跳台阶问题 C++的全部内容,希望文章能够帮你解决剑指 Offer 10- II. 青蛙跳台阶问题 C++所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部