题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:
假如第一次跳一级 后面还剩f(n-1)问题,假如跳两级,后面就是f(n-2)问题。。。。
总的跳法f(n)=f(n-1)+f(n-2)+....f(0);
public static int JumpFloorII(int target) {
int a[]=new int[target+1];
a[0]=1;
a[1]=1;
for(int i=2;i<=target;i++){
a[i]=0;
for(int j=i-1;j>=0;j--){
a[i]+=a[j];
}
}
return a[target];
}
这个复杂度比较高,利用
f(n)=f(n-1)+f(n-2)+....f(0);
f(n-1)=f(n-2)+...
得到法f(n)=2*f(n-1);
代码如下:
int jumpFloorII(int number) {
int f=1,fn=1;
for(int i=2;i<=number;i++){
fn=2*f;
f=fn;
}
return fn;
}
思路:
假如第一次跳一级 后面还剩f(n-1)问题,假如跳两级,后面就是f(n-2)问题。。。。
总的跳法f(n)=f(n-1)+f(n-2)+....f(0);
public static int JumpFloorII(int target) {
int a[]=new int[target+1];
a[0]=1;
a[1]=1;
for(int i=2;i<=target;i++){
a[i]=0;
for(int j=i-1;j>=0;j--){
a[i]+=a[j];
}
}
return a[target];
}
这个复杂度比较高,利用
f(n)=f(n-1)+f(n-2)+....f(0);
f(n-1)=f(n-2)+...
得到法f(n)=2*f(n-1);
代码如下:
int jumpFloorII(int number) {
int f=1,fn=1;
for(int i=2;i<=number;i++){
fn=2*f;
f=fn;
}
return fn;
}