一只青蛙一次可以跳上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 項的值 , 斐波那契數列 等價,唯一的不同在於起始數字不同。
- 青蛙跳台階問題: f(0)=1 , f(1)=1 , f(2)=2 ;
- 斐波那契數列問題: f(0)=0, f(1)=1 , f(2)=1 。
package Algriothm; public class Solution3 { public static void main(String[] args) { int i = numWays(7); System.out.println(i); } public static int numWays(int n) { int a = 1, b = 1, sum; for (int i = 0; i < n; i++) { sum = (a + b) % 100000007; a = b; b = sum; } return a; } }