乙隻青蛙一次可以跳上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 ...