題目
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法
解析:當青蛙到到n級時,有兩種跳法,一種是從n-1級跳1級,還有種是n-2跳2級
f(n)=f(n-1)+f(n-2),大家對這個公式是不是很熟悉,對,是斐波那契數列。所以這是一道動態規劃的問題。
// 斐波那契數列,只能上1或2級的方法
public int JumpFloor(int target) {
if (target <= 2)
return target;
int[] n = new int[target + 1];
n[1] = 1;
n[2] = 2;
for (int i = 3; i <= target; i++)
n[i] = n[i - 1] + n[i - 2];
return n[target];
}
擴展
一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
解析:當青蛙到到n級時,有跳1級,2級,3級…..n級
f(n)=f(n-1)+f(n-2)+f(n-3)……
// 斐波那契數列,只能上n級的方法
public int JumpFloor1(int target) {
if (target <= 2)
return target;
int[] n = new int[target + 1];
n[1] = 1;
n[2] = 2;
for (int i = 3; i <= target; i++){
n[i]=1;
for(int j=0;j<i;j++){
n[i]+=n[j];
}
}
return n[target];
}