天天看点

leetcode 面试题 08.01. 三步问题 动态规划 自下而上 爬楼梯类型

leetcode 面试题 08.01. 三步问题 动态规划 自下而上 爬楼梯类型

类比斐波那锲数列

题目:

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

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

示例2: 输入:n = 5 输出:13

提示: n范围在[1, 1000000]之间

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/three-steps-problem-lcci

思路: 时间复杂度O(n),空间复杂度O(n)。

代码:

class Solution(object):
    def waysToStep(self, n):
        """
        :type n: int
        :rtype: int
        """

        if n==1:
            return 1
        if n==2:
            return 2
        if n==3:
            return 4

        dp=[0]*1000001
        dp[1]=1
        dp[2]=2
        dp[3]=4

        for i in range(4,n+1):
            dp[i]=(dp[i-1]+dp[i-2]+dp[i-3])%1000000007
        
        return dp[n]


**本博客为原创作品,欢迎指导,转载请说明出处,附上本文链接,谢谢!**