示例:
小孩每一次可以走1,2,3步,那么形成不同的排列组合,会有很多种上楼梯方式。
注意:计算的是方案数而不是步数,因此在选择从i-1=>i i-2=>i i-3=>i的时候,方案数和i-1位置 i-2位置 i-3位置相同,不需要+1。
状态转移方程:dp[i]=dp[i-1]+dp[i-2]+dp[i-3]
class Solution {
public:
int waysToStep(int n)
{
const int MAX=1e9+7;
//边界位置情况
if(n==1)
return 1;
if(n==2)
return 2;
if(n==4)
return 4;
vector dp(n+1);
dp[1]=1;
dp[2]=2;
dp[3]=4;
int i=0;
for(i=4;i<=n;i++)
{
dp[i]=((dp[i-1]+dp[i-2])%MAX+dp[i-3])%MAX;
//为防止越界,每次进行加法运算取一次模
}
return dp[n];
}
};