📌  相关文章
📜  采取1步和2步,以及正好3步的方法,计算到达第N个楼梯的方式(1)

📅  最后修改于: 2023-12-03 15:12:28.276000             🧑  作者: Mango

计算到达第N个楼梯的方式

在计算到达第N个楼梯的方式时,我们可以采取不同的方法。其中常见的有1步、2步、或正好3步的方式。下面将介绍这三种方式的计算方法。

1步方式

当只能采取1步方式时,我们可以采用简单的递归方式计算到达第N个楼梯的方式。

def count_ways_1step(n):
    if n == 1:
        return 1
    if n == 2:
        return 2
    return count_ways_1step(n-1) + count_ways_1step(n-2)

此处的代码返回的是到达第N个楼梯的方式总数。例如,当n=3时,返回的结果为3。因为从第1个楼梯到第3个楼梯的方式有3种:1,1,1; 1,2; 2,1。

但该方法存在一个问题:计算复杂度为指数级别,会导致计算速度变慢,仅适用于计算较小的数。因此,我们还需要考虑其他的计算方式。

2步方式

当可以采取1步或2步方式时,我们可以采用类似斐波那契数列的方法计算到达第N个楼梯的方式。

def count_ways_2step(n):
    if n <= 2:
        return n
    a, b = 1, 2
    for i in range(3, n+1):
        c = a + b
        a = b
        b = c
    return c

此处的代码同样返回的是到达第N个楼梯的方式总数。例如,当n=3时,返回的结果仍为3。但计算复杂度为O(n),因此速度要比1步方式快很多。

正好3步方式

当只能采取正好3步方式时,我们可以采用动态规划的方法计算到达第N个楼梯的方式。

def count_ways_3step(n):
    if n <= 2:
        return n
    if n == 3:
        return 4
    dp = [0] * (n+1)
    dp[1], dp[2], dp[3], dp[4] = 1, 2, 4, 7
    for i in range(5, n+1):
        dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
    return dp[n]

此处的代码同样返回的是到达第N个楼梯的方式总数。例如,当n=3时,返回的结果为4。因为从第1个楼梯到第3个楼梯的方式有4种:1,1,1; 1,2; 2,1; 3。

该方法的计算复杂度为O(n),因此速度要比1步方式快很多,但比2步方式慢一些。