A題之變態青蛙跳
阿新 • • 發佈:2018-02-14
.... 問題 public log post 第一次 擁有 ati popu
一僅僅青蛙一次能夠跳上1級臺階,也能夠跳上2級……它也能夠跳上n級。
上Java代碼:
public class Solution { ? ? public int JumpFloorII(int target) { ? ? ? if(target<=1) ? ? ? ? ? ? return 1; ? ? ? ? else ? ? ? ? ? ? return 2*JumpFloorII(target-1); ? ? } }
求該青蛙跳上一個n級的臺階總共同擁有多少種跳法。
分析:
這是一個斐波拉契數列的引申問題,先來看看斐波拉契數列:
n<=1, ? ?f(n)=1;
n>=2, ? ?f(n)=f(n-1)+f(n-2);
假設這個題變一下“一僅僅青蛙一次能夠跳上1級臺階。也能夠跳上2級。求該青蛙跳上一個n級的臺階總共同擁有多少種跳法。”就成了典型的斐波拉契數列問題了。
回過頭來看這個題,貌似沒有頭緒。怎麽辦,採用最笨的方法。窮舉:
n<=1, ? ? f(n)=1;
n=2, ? ? ? ?f(2)=2;
n=3, ? ? ? ?f(3)=4; ? ?
第一次走一步,2種。第一次走倆步,1種。一次走三步。1種;
n=4, ? ? ? ?f(4)=8; ? ?
第一次走一步,4種。第一次走倆步,2種;第一次走三步。1種。一次走四步,1種。
是不是看到規律了:
f(n)=f(n-1)+f(n-2)+.....+f(1)+f(0)=2f(n-1)
public class Solution { ? ? public int JumpFloorII(int target) { ? ? ? if(target<=1) ? ? ? ? ? ? return 1; ? ? ? ? else ? ? ? ? ? ? return 2*JumpFloorII(target-1); ? ? } }
A題之變態青蛙跳