上楼梯问题

有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶、3阶。请实现一个方法,计算小孩有多少种上楼的方式。为了防止溢出,请将结果Mod 1000000007
给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。

测试样例:

1
返回:1

把暴力递归变成动态规划

class GoUpstairs:
    """动态规划"""

    def countWays(self, n):
        mat = [1, 1, 2]
        if n<3:
            return mat[2]
        count = 2
        while(count!=n):
            count += 1
            buff = (mat[count-1]+mat[count-2]+mat[count-3])%1000000007
            if buff > 1000000007:
                buff = buff%1000000007
            mat.append(buff)

        return mat[count]

class GoUpstairs:

    """暴力递归"""
    def countWays(self, n):
        if n==1 or n==0:
            return 1
        if n==2:
            return 2
        return self.countWays(n-1)+self.countWays(n-2)+self.countWays(n-3)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容