一隻青蛙一次能夠跳上1級臺階,也能夠跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(前後次序不一樣算不一樣的結果)。java
不妨本身先去試一下,牛客oj -> 青蛙跳臺階1spa
感受用動態規劃很簡單。3d
青蛙到達第 i 階的方法總數 = 第 i -1 階方法數 + 第 i -2 階方法數code
代碼實現以下cdn
public class Solution {
public int JumpFloor(int target) {
if ( target == 1) {
return 1;
}
int[] dp = new int[target + 1];
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= target; i++) {
dp[i] = dp[i - 1] + dp[i -2];
}
return dp[target];
}
}
複製代碼
一隻青蛙一次能夠跳上1級臺階,也能夠跳上2級……它也能夠跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。blog
不妨本身先去試一下,牛客oj -> 青蛙跳臺階2 get
用斐波那契的思想來解決it
/* 假設f(n)是n個臺階跳的次數。 1. f(1) = 1 2. f(2) 會有兩個跳得方式,一次1階或者2階,這回歸到了問題f(1),f(2) = f(2-1) + f(2-2) 3. f(3) 會有三種跳得方式,1階、2階、3階,那麼就是第一次跳出1階後面剩下:f(3-1);第一次跳出2階,剩下f(3-2);第一次3階,那麼剩下f(3-3).所以結論是f(3) = f(3-1)+f(3-2)+f(3-3) 4. f(n)時,會有n中跳的方式,1階、2階...n階,得出結論:f(n) = f(n-1)+f(n-2)+...+f(n-(n-1)) + f(n-n) => f(0) + f(1) + f(2) + f(3) + ... + f(n-1) == f(n) = 2*f(n-1) */
public class Solution {
public int JumpFloorII(int target) {
if(target==0) {
return 0;
}
if(target==1) {
return 1;
}
return 2 * JumpFloorII(target-1);
}
}
複製代碼