題目描述
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
主要思路
如果你剛看完上到的斐波那契數列,再看這道題是不是有些熟悉。沒有?高數中有個很牛皮的找規律方法。相信你一定知道它是啥 。【數學歸納】
但大致看一下
首先看跳第一級。只要一種方法
跳第二級有。2種
跳第三級呢。先看是怎麼跳上第三級的。它可是是從3-1級跳的,也可能是從3-2級跳的。跳3-1級也就是第二級的方法已經有了,同理跳到3-2級也就是第一級的方式也就用了。(只要我們有點概率論的基礎我們就知道這裏要做加法操作)即跳第三級的方式=第一級的方式+跳第二級的方式
那麼第i級呢 同理(i-1)的方式+(i-2)的方式
這不就是斐波那契數列的算法嗎
不同點在於。斐波那契數列的第二項=第零項+第一項=1
這裏的可不是。這裏跳到第二級的方式是2
修改一下即可
我的代碼
//方法一。重新設置n=2的值
function jumpFloor(number) {
// write code here
if (number == 0) {
return 0;
}
if (number == 1) {
return 1;
}
if (number == 2) {
return 2;
}
let arr = [];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
for (let i = 3; i <= number; i++) {
arr[i] = arr[i - 1] + arr[i - 2]
}
return arr[arr.length - 1];
}
//方法2:找其與斐波那契數列的關係。發現可以不用改n=2的值。斐波那契數列索引後移一位即可
function jumpFloor(number)
{
// write code here
if (number == 0) {
return 0;
}
if (number == 1) {
return 1;
}
let arr = [];
arr[0] = 0;
arr[1] = 1;
for (let i = 2; i <= number+1; i++) {
arr[i] = arr[i - 1] + arr[i - 2]
}
return arr[arr.length-1];
}