解法一:暴力破解
public class Solution {
public int JumpFloorII(int target) {
if(target<3) return target;
int[] ans=new int[target+1];
ans[1]=1; ans[2]=2;
for(int i=3; i<target+1; i++){
for(int j=1; j<i; j++){
ans[i]+=ans[j];
}
ans[i]++;
}
return ans[target];
}
}
解法二:减少中间值
public class Solution {
public int JumpFloorII(int target) {
if(target<3) return target;
int sum=3;
for(int i=3; i<target; i++){
int res=sum+1;
sum+=res;
}
return sum+1;
}
}
解法三:移位
public class Solution {
public int JumpFloorII(int target) {
if(target==0||target==1) return 1;
int a=1;
for(int i=1; i<target; i++){
a<<=1;
}
return a;
}
}
解法四:公式法
public class Solution {
public int JumpFloorII(int target) {
if(target==0||target==1) return 1;
return (int) Math.pow(2, target-1);
}
}