面试题 08.01. 三步问题

三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。

示例1:

输入:n = 3
输出:4
说明: 有四种走法
示例2:

输入:n = 5
输出:13
提示:

n范围在[1, 1000000]之间

思路: 知识点动态规划  坑点: 因为这能条三个台阶,所以我们的动态方程中,有三项d[i-1] + d[i-2] + d[i-3],前两项相加的时候,会存在溢出的情况,因此此时前两项也需要进行取模1000000007操作。

class Solution {
public:
    int waysToStep(int n) {
    if(n == 1) return 1;
    if(n == 2) return 2;
    if(n == 3) return 4;
    int dp[n+1];
    dp[1] = 1;
    dp[2] = 2;
    dp[3] = 4;
    for(int i = 4;i < n+1;i++){
        dp[i] = ((dp[i - 1] + dp[i - 2])% 1000000007 + dp[i - 3]) % 1000000007;
    }
    return dp[n];
    }
};

 

-------------------------------------------

个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

posted @ 2020-08-12 14:38  比尔的歌  阅读(125)  评论(0)    收藏  举报