算法練習(八):青蛙跳台階問題


一只青蛙一次可以跳上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;
    }
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM