劍指offer 09變態跳臺階
阿新 • • 發佈:2018-08-02
第一步 結果 ring write 遞歸 ret sta .... == 一只青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
java版本:
public class Solution { public static void main(String[] args){ long startTime=System.currentTimeMillis(); System.out.println("第4項的結果是:"+JumpFloorII(4)); long endTime=System.currentTimeMillis(); System.out.println("程序執行的時間:"+(endTime-startTime)+"ms"); } /*遞歸*/ public static int JumpFloorII(int target){ if(target==1){ return 1; }else{ return 2*JumpFloorII(target-1); } } /*左移*/ /*public static int JumpFloorII(int target){ int a=1; return a<<(target-1); }*/ }
js版本:
function jumpFloorII(number) { if(number==1){ return number; }else{ return 2*jumpFloorII(number-1); }// write code here }
總結:用遞歸的思路
第一步可以跳1階,跳2階.......可以跳n階,有n種跳法。
第二步剩余(n-1)個臺階,f(n-1)種跳法。
第三步剩余(n-2)個臺階,f(n-2)種跳法。
所以
f(n)=f(n-1)+f(n-2)+.........f(1)
f(n-1)=f(n-2)+f(n-3)+.........f(1)
兩式相減得到發f(n)=2*f(n-1)。
左移思路:
每一項的結果都是上一項的2倍,所以左移1位。
劍指offer 09變態跳臺階