变态跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。


规律:

因为n级台阶,第一步有n种跳法:跳1级、跳2级…跳n级:
  跳1级,剩下n-1级,则剩下跳法是f(n-1);
  跳2级,剩下n-2级,则剩下跳法是f(n-2);
  …
  跳n-1级,剩下1级,则剩下跳法是f(1);
  跳n级,剩下0级,则就1种跳法.

所以f(n)=f(n-1)+f(n-2)+…+f(1)+1

又因为f(n-1)=f(n-2)+f(n-3)+…+f(1)+1 所以f(n)=2f(n-1)

解法一:(函数递归)

使用规律:f(n)=2f(n-1)

1
2
3
4
5
6
7
8
public class Solution {
public int JumpFloorII(int target) {
if(target<=0) return 0; //f(0)
if(target==1) return 1; //f(1)

return JumpFloorII(target-1)*2; //f(n)
}
}

解法二:(迭代)

使用规律:f(n)=f(n-1)+f(n-2)+…+f(1)+1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Solution {
public int JumpFloorII(int target) {
if(target<=0) return 0;
if(target==1) return 1;

int[] arr = new int[target+1]; //动态分配堆内存
arr[0]=1;
arr[1]=1;
for(int i=2; i<=target; i++){
for(int j=0; j<i; j++){
arr[i]+=arr[j]; //f(n)=f(n-1)+f(n-2)+...+f(1)+1
}
}
return arr[target];
}
}

---------------- The End ----------------
0%