剑指Offer_08_跳台阶
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解题思路
这是一个动态规划的题。对于n个台阶,可以是n-1个台阶跳一步得到,也可以是n-2步台阶跳两步得到。因此有递归式 f(n) = f(n-1) + f(n-2);
因此可以使用两种方式递归和循环来实现。
实现
- 循环
public class Solution {
public int JumpFloor(int target) {
if(target==1) return 1;
if(target==2) return 2;
int fn_1 = 2, fn_2 = 1;
int fn = 0;
for(int i = 3; i <= target; i++){
fn = fn_1 + fn_2;
fn_2 = fn_1;
fn_1 = fn;
}
return fn;
}
}
2. 递归
public class Solution {
public int JumpFloor(int target) {
if (target == 0) return 0;
int[] dp = new int[target + 1];
for (int i = 0 ; i < target + 1; i ++){
dp[i] = -1;
}
dp[0] = 1;
dp[1] = 1;
return jumpFloor(target, dp);
}
private int jumpFloor(int n, int[] dp) {
if (dp[n] >= 0) return dp[n];
else{
return dp[n] = fibonacci(n - 1, dp) + fibonacci(n - 2, dp);
}
}
}