https://leetcode-cn.com/problems/three-steps-problem-lcci/
有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。
小孩一次可以上1阶、2阶或3阶;
设置dp数组记录n阶台阶上楼梯的方式;
dp[n-1] 当走到 n-1 台阶时,只剩一种走法
dp[n-2] 当走到 n-2 台阶时,只剩两种走法
dp[n-3] 当走到 n-3 台阶时,只剩四种走法
走到第n台阶是,上三种情况都可以到达。所以dp[n] = dp[n-1] + dp[n-2] + dp[n-3];
class Solution {
public:
int waysToStep(int n) {
if(n==1) return 1;
else if(n==2) return 2;
else if(n==3) return 4;
long long int a=1,b=2,c=4,d;
for(int i=4;i<=n;i++){
d = c;
c = (a+b+c)%1000000007;
a = b;
b = d;
}
return c;
}
};