算法:青蛙跳臺(tái)階問題

一只青蛙一次可以跳上1級(jí)臺(tái)階,也可以跳上2級(jí)臺(tái)階。求該青蛙跳上一個(gè) n 級(jí)的臺(tái)階總共有多少種跳法。
答案需要取模 1e9+7(1000000007),如計(jì)算初始結(jié)果為:1000000008,請(qǐng)返回 1。
示例1
輸入:n = 2
輸出:2
示例2
輸入:n = 0
輸出:1
提示
0 <= n <= 100
解題思路
此類求 多少種可能性 的題目一般都有 遞推性質(zhì) ,即 f(n) 和 f(n-1)…f(1) 之間是有聯(lián)系的。
設(shè)跳上 n 級(jí)臺(tái)階有 f(n) 種跳法。在所有跳法中,青蛙的最后一步只有兩種情況: 跳上 1 級(jí)或 2 級(jí)臺(tái)階。
當(dāng)為 1 級(jí)臺(tái)階: 剩 n-1 個(gè)臺(tái)階,此情況共有 f(n-1) 種跳法;
當(dāng)為 2 級(jí)臺(tái)階: 剩 n-2 個(gè)臺(tái)階,此情況共有 f(n-2) 種跳法。
f(n) 為以上兩種情況之和,即 f(n)=f(n-1)+f(n-2) ,以上遞推性質(zhì)為斐波那契數(shù)列。本題可轉(zhuǎn)化為 求斐波那契數(shù)列第 n 項(xiàng)的值 ,唯一的不同在于起始數(shù)字不同。
青蛙跳臺(tái)階問題: f(0)=1, f(1)=1 , f(2)=2;
斐波那契數(shù)列問題: f(0)=0 , f(1)=1 , f(2)=1 。

代碼如下:

復(fù)雜度分析
時(shí)間復(fù)雜度 :O(N)。
空間復(fù)雜度 : O(1)。
END
本文內(nèi)容出處是力扣官網(wǎng),希望和大家一起刷算法,在后面的路上不變禿但是變強(qiáng)!
好兄弟可以點(diǎn)贊并關(guān)注我的公眾號(hào)“javaAnswer”,全部都是干貨。
