1.题目
三步问题。有个小孩正在上楼梯,楼梯有 n 阶台阶,小孩一次可以上 1 阶、2 阶或 3 阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模 1000000007。
示例 1:
输入:n = 3 输出:4 说明:有四种走法
示例 2:
输入:n = 5 输出:13
提示:
- n 范围在[1, 1000000]之间
2.算法原理
class Solution {
public:
int waysToStep(int n)
{
const int MOD = 1000000007;
if(n==1) return 1;
if(n==2) return 2;
if(n==3) return 4;
vector<int> dp(n+1);
dp[1]=1,dp[2]=2,dp[3]=4;
for(int i =4;i<=n;i++)
{
dp[i]=((dp[i-1]+dp[i-2])%MOD+dp[i-3])%MOD;
}
return dp[n];
}
};