题目描述
思路
- 找规律,找到规律以后用函数表达式表示出来即可
- 可以从斐波那契数列得到相应启发,使用动态规划来书写
代码实现
class Solution {
// 备忘录,用一个数组来进行相应存取
int[] memo;
public int climbStairs(int n) {
/*
这种题目其实就是找规律,找到规律以后,用函数表达式表示出来即可,这些都是相当重要的
动态规划:
这题其实就是斐波那契数列,
- 爬到第n级台阶的方法个数等于爬到n - 1的方法个数 + n - 2的方法个数之和
*/
memo = new int[n + 1];
return dp(n);
// 写法其实是一样的
}
// 定义:爬到第n级台阶的方法个数为 dp(n)
int dp(int n){
// base case
if(n <= 2){
return n;
}
if(memo[n] > 0){
return memo[n];
}
// 状态转移方程
memo[n] = dp(n - 1) + dp(n - 2);
return memo[n];
}
}