面试题 08.01. 三步问题
动态规划
class Solution {
public:
int waysToStep(int n) {
// 1.明确状态含义:dp[i]表示上i阶台阶的方式
// 创建n + 4个空间是为了防止下边base状态初始化时数组越界
vector<long long int> dp(n + 4, 0);
// 2.base状态初始化
dp[1] = 1;
dp[2] = 2;
dp[3] = 4;
// 3.状态转移:
// 到第i阶台阶可能是从i-1阶一步走一层,也可能是从i-2阶一步走两层,也可能从i-3阶一步走三层
// 注意是上楼梯的方式的数目而不是步数,不需要在前一状态的基础上+1
for(int i = 4; i <= n; i++){
dp[i] = dp[i - 3] % 1000000007 + dp[i - 2] % 1000000007 + dp[i - 1] % 1000000007;
}
return dp[n] % 1000000007;
}
};