三步问题 —— 动态规划详解(含滚动数组优化)
题目描述
有一个小孩正在上楼梯,楼梯总共有 n
阶台阶。小孩一次可以选择上 1 阶、2 阶或3阶。
请实现一种方法,计算小孩有多少种上楼梯的方式。
由于结果可能非常大,需要对结果取模 109+710^9+7 (1000000007
)。
示例 1:
输入:n = 3
输出:4
说明:总共有4种走法:(1,1,1)、(1,2)、(2,1)、(3)
示例 2:
输入:n = 5
输出:13
解题思路分析
这个题目明显符合动态规划(Dynamic Programming, DP)模型:
- 子问题:到达第
i
阶台阶的方法数,依赖于到达i-1
、i-2
、i-3
阶的方法数。 - 状态定义:设
dp[i]
表示到达第i
阶台阶的方法数。
状态转移方程:
- dp[i]=dp[i−1]+dp[i−2]+dp[i−3]
- 边界条件: