青蛙跳台階問題,乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。
求該青蛙跳上乙個n級的台階總共有多少種跳法。
/*** 關於本題,分析如下:
* f(1) = f(1-1) // 第一次跳1階總跳法
* f(2) = f(2-1) + f(2-2) //第一次跳1階總跳法 + 第一次跳2階總跳法
* f(3) = f(3-1) + f(3-2) + f(3-3) //第一次跳1階總跳法 + 第一次跳2階總跳法 + 第一次跳3階總跳法
* ...
* f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(n-(n-1)) + f(n-n)
* * 說明:
* 1) 這裡的f(n)代表的是n個台階有一次1, 2, ..., n階的跳法數。
* 2) n = 1時,只有1種跳法,f(1) = 1
* 3) n = 2時,會有2種跳法,第一次1階或者2階,這回歸到了問題(1) ,f(2) = f(2-1) + f(2-2)
* 4) n = 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)
* * 5) n = 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)
* 6) 以上已經是一種結論,但是為了簡單,我們可以繼續簡化:
f(n-1) = f(0) + f(1) + f(2) + f(3) + ... + f((n-1)-1) = f(0)+f(1) + f(2) + f(3) + ... + f(n-2)
f(n) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2) + f(n-1) = f(n-1) + f(n-1)
* * 可以得出:f(n) = 2*f(n-1)
* * 7) 得出最終結論, 在n階台階, 一次有1, 2, ..., n階的跳的方式,總得跳法為:
* | -1 ,(n=0)
* f(n) = | 1 ,(n=1)
* | 2*f(n-1),(n>=2)
* *//**
* 解法一——遞迴解法
* */
public class solution
public int jumpfloorii(int target) else if (target == 1) else
}}/**
* 解法二——移位解法
* */
public class solution
public int jumpfloorii(int target)
}
青蛙跳台階問題
題目 乙隻青蛙一次可以跳上 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 ...