编程语言
首页 > 编程语言> > 剑指offer(JavaScript)刷题记录08—— 青蛙跳台阶问题

剑指offer(JavaScript)刷题记录08—— 青蛙跳台阶问题

作者:互联网

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

难度:简单

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

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

示例 1:

输入:n = 2
输出:2

示例 2:

输入:n = 7
输出:21

示例 3:

输入:n = 0
输出:1

提示:

这道题就是斐波那契数列的应用:

 

设跳上 n 级台阶有 f(n)种跳法。在所有跳法中,青蛙的最后一步只有两种情况: 跳上 1级或 2 级台阶
当为 跳上1 级台阶: 剩 n-1 个台阶,此情况共有 f(n-1)种跳法;
当为跳上 2 级台阶: 剩 n-2 个台阶,此情况共有 f(n-2)种跳法。
f(n)为以上两种情况之和,即 f(n)=f(n-1)+f(n-2),以上递推性质为斐波那契数列。本题可转化为 求斐波那契数列第 n 项的值 ,与 面试题10- I. 斐波那契数列 等价,唯一的不同在于起始数字不同

代码如下:

/**
 * @param {number} n
 * @return {number}
 */
var numWays = function(n) {
    if(n==0) return 1;
    if(n==1) return 1;
    

    let num1=1;
    let num2=1;
    let sum=0;
    for(let i=2;i<=n;i++){
        sum=(num1+num2)%1000000007;
        num1=num2;
        num2=sum;

    }
    return sum;
};

 

标签:台阶,offer,08,JavaScript,青蛙,跳法,跳上,let,那契
来源: https://blog.csdn.net/m0_37483148/article/details/113727754