10-2 變態跳臺階
一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
變態跳臺階問題,是斐波那契額數列 青蛙跳臺階 跳樓梯問題的變形。
假設當前在3臺階,那麼可能從0級跳到3臺階 1臺階到3臺階 2臺階到3臺階 3臺階到3臺階。
f(3) = f(1)+f(2)+f(3)
f(1) = 1
f(2) = 2
f(3) = 1+2+1
1.暴力解
public int JumpFloorII(int target) {
if(target == 0 || target == 1) {
return 1;
}
int [] f = new int [target+1];
f[0] = f[1] = 1;
for(int i=2;i<=target;i++){
for(int j=0;j<i;j++){
f[i] += f[j];
}
}
return f[target];
}
2.遞歸
f(n) = 2^(n-1) 找到規律
public int JumpFloorII(int target) {
if(target < 0){
return -1;
}else if(target == 1){
return 1;
}else{
return 2*JumpFloorII(target-1);
}
}