Leetcode 面试题 08.01.三步问题

Leetcode 面试题 08.01.三步问题

1 题目描述(Leetcode题目链接)

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

 输入:n = 3 
 输出:4
 说明: 有四种走法
 输入:n = 5
 输出:13

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

2 题解

  很容易想的动态规划问题,不过需要注意一下取模的问题。状态转移方程为:
d p [ i ] = d p [ i − 1 ] + d p [ i − 2 ] + d p [ i − 3 ] dp[i] = dp[i-1]+dp[i-2]+dp[i-3] dp[i]=dp[i1]+dp[i2]+dp[i3]

class Solution:
    def waysToStep(self, n: int) -> int:
        if n <= 2:
            return n
        a, b, c = 1, 1, 2
        for i in range(3, n+1):
            a, b, c = b, c, ((a+b)%1000000007+c)%1000000007
        return c

你可能感兴趣的:(Leetcode)