1.题目解析
2.算法原理
本题可以近似看做泰波那契数列,即小孩到第一个台阶需要一步,到第二个台阶则是到第一个台阶的步数加上第一阶到第二阶的步数,同理第三阶就是第二阶的步数加上第二阶到第三阶的步数,由于小孩只能走三步,所以之后的位置就是该位置前三个位置的步数相加
3.实战代码
class Solution {
public:
int waysToStep(int n)
{
const int MOD = 1e9 + 7;
//处理边界
if(n <= 2)
{
return n;
}
else 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];
}
};