import java.util.*;
public class Solution {
/**
* 跳台阶问题的公共接口方法
*
* @param number 台阶总数
* @return 返回跳上number级台阶的总方法数
*/
public int jumpFloor(int number) {
// 创建备忘录数组,用于存储已经计算过的结果
int[] memo = new int[number + 1];
// 调用动态规划方法计算结果
return dp(number, memo);
}
/**
* 动态规划方法,使用备忘录优化递归
*
* @param number 当前要计算的台阶数
* @param memo 备忘录数组,存储已经计算过的结果
* @return 返回跳上number级台阶的方法数
*/
private int dp(int number, int[] memo) {
// 基本情况:当台阶数小于等于2时,直接返回台阶数
if (number <= 2) {
return number;
}
// 如果备忘录中已经存在该结果,直接返回备忘录中的值,避免重复计算
if (memo[number] != 0) {
return memo[number];
}
// 使用递推关系:f(n) = f(n-1) + f(n-2)
// 将计算结果存入备忘录并返回
memo[number] = dp(number - 1, memo) + dp(number - 2, memo);
return memo[number];
}
}