剑指offer(JavaScript)刷题记录08—— 青蛙跳台阶问题
作者:互联网
难度:简单
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n
级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
输入:n = 2 输出:2
示例 2:
输入:n = 7 输出:21
示例 3:
输入:n = 0 输出:1
提示:
0 <= n <= 100
这道题就是斐波那契数列的应用:
设跳上 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