版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ccnuacmhdu/article/details/84679211
时间限制:1秒 空间限制:32768K 热度指数:248187
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
代码一(递归):
public class Solution {
public int JumpFloorII(int target){
if(target == 0){
return 1;
}else{
int n = target;
int sum = 0;
for(int i = 1; i <= n; i++){
if(n-i>=0){//注意这里是>=0
sum += JumpFloorII(n-i);
}else{
break;
}
}
return sum;
}
}
}
代码二(推公式);
仍然是逆向考虑,最后一次跳级必然是1、2、3……n级,那么f(n)=1+f(n-1)+f(n-2)+……+f(1),那么把n换成n+1,有f(n+1)=1+f(n)+f(n-1)+……+f(1),两式相减得到f(n+1)-f(n)=f(n),即f(n+1)=2*f(n),由于f(1)=1,那么f(n)=2^(n-1)
public class Solution {
public int JumpFloorII(int target) {
if(target == 1){
return 1;
}else{
return 2*JumpFloorII(target-1);
}
}
}
或
public class Solution {
public int JumpFloorII(int target){
return 1<<(--target);
}
}