10、变态跳台阶
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解法一:暴力
公式:f(N)=f(1)+f(2)+…+f(n-1)+1; (n>2)
public class Solution {
public int JumpFloorII(int target) {
if(target<3) return target;
int dp[]=new int[target];
dp[0]=1;
dp[1]=2;
for(int i=2;i<target;i++){
for(int j=0;j<i;j++){
dp[i]+=dp[j];
}
dp[i]++;
}
return dp[target-1];
}
}
解法二:递归
public class Solution {
public int JumpFloorII(int target) {
if(target<3) return target;
int res=0;
for(int i=1;i<target;i++){
res+=JumpFloorII(i);
}
return ++res;
}
}
解法二:数学公式
an=a1+a2+…+an-1+1
an-1=a1+a2+…an-2+1
an-an-1=an-1---->an=2*an-1
根据递推公式发现:第N台台阶=2^N
public class Solution {
public int JumpFloorII(int target) {
return 1<<(target-1);
}
}