/**
- 题目9:变态跳台阶
- 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- /
//解法1:递归破解,时间、空间复杂度O(n^n),O(1)[这里不太清楚] 24ms
public int sum_9=0;
public void jump_9(int target){
if(target<=0){
if(target==0) sum_9++;
return;
}
for(int i=1;i<=target;i++)
jump_9(target-i);
}
//解法1的简化版 19ms
public int jump_9_simple(int target){
if(target==0) return 1;
int cnt=0;
for(int i=0;i<target;i++)
cnt+=jump_9_simple(i);
return cnt;
}
/**解法2:利用公式,时间、空间复杂度O(n)、O(1) 16ms
* 设跳第n阶梯的跳法数量是F(n),那么F(n)=1+F(n-1)+F(n-2)+...+F(1)=2F(n-1)=2^(n-1)
*/
public int jump_9_2(int target){
return 1<<(target-1);
}
/**
* 解法3:动态规划,时间、空间复杂度O(n^2)、O(n) 16ms
* (1)第n个状态都包含直接跳到第n步的跳法(0另外做讨论)
* (2)第n个状态是前n-1种状态+直接跳n步的方法
*/
public int jump_9_3(int target){
int [] res=new int[target+1];
Arrays.fill(res,1);
res[0]=0;
for(int i=2;i<=target;i++){
for(int j=i-1;j>=1;j--) res[i]+=res[j];
}
return res[target];
}
京公网安备 11010502036488号