NO.9 變態(tài)跳臺階
知識點:遞歸和循環(huán)
思路:
關(guān)于本題,前提是n個臺階會有一次n階的跳法。分析如下:
f(1) = 1
f(2) = f(2-1) + f(2-2) //f(2-2) 表示2階一次跳2階的次數(shù)。
f(3) = f(3-1) + f(3-2) + f(3-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階的 跳法數(shù)。
2)n = 1時,只有1種跳法,f(1) = 1
3) n = 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)
因此結(jié)論是f(3) = f(3-1)+f(3-2)+f(3-3)
5) n = n時,會有n中跳的方式,1階、2階...n階,得出結(jié)論:
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) 由以上已經(jīng)是一種結(jié)論,但是為了簡單,我們可以繼續(xù)簡化:
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) 得出最終結(jié)論,在n階臺階,一次有1、2、...n階的跳的方式時,總得跳法為:
| 0 ,(n=0 )
f(n) = | 1 ,(n=1 )
| 2*f(n-1),(n>=2)代碼:
public class Solution { public int JumpFloorII(int target) { if(target<=0){ return -1; }else if(target == 1){ return 1; }else{ return 2*JumpFloorII(target-1); } }}
新聞熱點
疑難解答