一仅仅青蛙一次能够跳上1级台阶,也能够跳上2级……它也能够跳上n级。
求该青蛙跳上一个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)
上Java代码:
public class Solution {
? ? public int JumpFloorII(int target) {
? ? ? if(target<=1)
? ? ? ? ? ? return 1;
? ? ? ? else
? ? ? ? ? ? return 2*JumpFloorII(target-1);
? ? }
}