题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
示例1
- 输入
3
- 返回值
4
解题思路
在剑指Offer的跳台阶中,如果下一步是n阶台阶,则只有两种可能,一种是在n-1阶台阶,二种是在n-2阶台阶,因此F[n]=F[n-1]+F[n-2]。
现在有n种,F[n]=F[n-1]+F[n-2]+F[n-3]+……+F[2]+F[1]+F[0]
其中:F[0]=F[1]=1
- 直接循环
public class Solution {
public int JumpFloorII(int target) {
int[] a = new int[target+1];
a[0] = a[1] = 1;
for (int i = 2; i <= target; i++) {
for (int j = 0; j < i; j++) {
a[i] += a[j];
}
}
return a[target];
}
}
因为:F[n]=F[n-1]+F[n-2]+F[n-3]+……+F[2]+F[1]+F[0]
F[n-1]=F[n-2]+F[n-3]+……+F[2]+F[1]+F[0]
所以:F[n]=2*F[n-1]
- 递归
public class Solution {
public int JumpFloorII(int target) {
if(target == 0 || target == 1)
return 1;
return 2*JumpFloorII(target-1);
}
}
- 动态规划
public class Solution {
public int JumpFloorII(int target) {
if(target == 1)
return 1;
int a = 1, b = 0;
for (int i=2; i<= target; ++i) {
b = 2*a;
a = b;
}
return b;
}
}
代码
public class Solution {
public int JumpFloorII(int target) {
if(target == 0 || target == 1)
return 1;
return 2*JumpFloorII(target-1);
}
}