青蛙跳台階問題

2021-10-21 02:25:48 字數 1280 閱讀 4584

乙隻青蛙一次可以跳上1級台階,也可以跳上2級台階。求該青蛙跳上乙個 n 級的台階總共有多少種跳法。

(答案需要取模 1e9+7(1000000007),如計算初始結果為:1000000008,請返回 1)

示例 1:

輸入:n = 2

輸出:2

示例 2:

輸入:n = 7

輸出:21

示例 3:

輸入:n = 0

輸出:1

設跳上 n 級台階有 f(n)f(n) 種跳法。在所有跳法中,青蛙的最後一步只有兩種情況: 跳上 1 級或 2 級台階。

當為 1 級台階: 剩 n−1 個台階,此情況共有 f(n-1)f(n−1) 種跳法;

當為 2 級台階: 剩 n−2 個台階,此情況共有 f(n-2)f(n−2) 種跳法。

f(n)f(n) 為以上兩種情況之和,即 f(n)=f(n-1)+f(n-2)f(n)=f(n−1)+f(n−2) ,以上遞推性質為斐波那契數列。本題可轉化為 求斐波

青蛙跳台階問題: f(0)=1 , f(1)=1 , f(2)=2 ;

斐波那契數列問題: f(0)=0 , f(1)=1 , f(2)=1 。

動態規劃解析:

狀態定義: 設 dp 為一維陣列,其中 dp[i] 的值代表 斐波那契數列第 $i$ 個數字 。

轉移方程: dp[i + 1] = dp[i] + dp[i - 1] ,即對應數列定義 f(n + 1) = f(n) + f(n - 1);

初始狀態: dp[0] = 1, dp[1] = 1 ,即初始化前兩個數字;

返回值: dp[n] ,即斐波那契數列的第 n 個數字。

**如下:

public class frogjumpingsteps 

/*** @param n: 輸入的台階數

* @return: 返回方法數

*/public static int numways(int n)

int dp = new int[n + 1];

dp[0] = 1;

dp[1] = 1;

for(int i = 2; i < n+1; i++)

return dp[n];}}

青蛙跳台階問題

題目 乙隻青蛙一次可以跳上 1 級台階,也可以跳上2 級。求該青蛙跳上乙個n 級的台階總共有多少種跳法。我的思路 最開始我的思路是把這個看成是乙個數學問題,n i 1 k 2先把所有可能滿足這個公式的i和k求出來。然後在對i和k做排列組合。很明顯i的範圍應該是0 public int jumpflo...

青蛙跳台階問題

1 乙隻青蛙一次可以跳上 1 級台階,也可以跳上2 級。求該青蛙跳上乙個n 級的台階總共有多少種跳法。2 乙隻青蛙一次可以跳上1級台階,也可以跳上2 級 它也可以跳上n 級,此時該青蛙跳上乙個n級的台階總共有多少種跳法?分析 1 當n 1,只有1中跳法 當n 2時,有兩種跳法 當n 3 時,有3種跳...

青蛙跳台階問題

問題一 有乙隻青蛙,需要跳上100級台階。青蛙每次可以調一級或者兩級台階。問青蛙有多少種方式可以跳100級台階。思路 逆推 當青蛙站在100級台階上時,那它跳上100級時有可能是從99級跳一級上來的,也可能是從98級跳兩級跳上來的 從98級跳兩個一級包括在從99級跳一級情況內,所以不予考慮 所以f ...