这题有多种做法,这里主要讲其中的两种。
1、组合数学思想。除了最后一个台阶必须跳之外,其余的台阶我们既可以选择跳,也可以选择不跳,这样就是每个位置有两种选择,答案就是2^(n-1)。
public class Solution {
public int JumpFloorII(int target) {
return 1<<(target-1);
}
}
2、推导式
根据上一个题目:青蛙只跳1或2可以得出是一个斐波那契问题,即a[n]=a[n-1]+a[n-2],那么能跳1,2,3个台阶时a[n]=a[n-1]+a[n-2]+a[n-3],......
依次类推,能推出本题的
a[n]=a[n-1]+a[n-2]+......+a[1];
但是上述时间复杂度达到O(n^2),空间复杂度也达到O(n),重新看一下上述结论:
a[n]=a[n-1]+a[n-2]+......+a[1];..........................①
a[n-1]= a[n-2]+......+a[1];..........................②
两式相减可知:a[n]=2*a[n-1];
public class Solution {
public int JumpFloorII(int target) {
int f=1;
int result = 1;
for(int i=2;i<=target;i++){
result = f*2;
f = result;
}
return f;
}
}