豆包MarsCode【有点限制地走楼梯】

275 阅读1分钟

问题描述

  • 有个楼梯比较高,我们有多种方式可以走上去,但是在走楼梯时有几个限制:

    • 一是每次可以走一或者两步
    • 二是不能连续地走两步

    那么我们需要计算总共有多少种可能的走法

输入

楼梯的层数,层数n(0 < n < 100)

输出

总共有多少种走法

思路

这道题是 leetcode 70. 爬楼梯 的一个变体,多了一个限制:不能连续地走两步

先来简单的列出来几个示例

楼层走法走法
111
221、 2
33111、12、21
441111、121、112、211
5611111、1211、1121、1112、2111、212
69111111、12111、1212、11211、11121、11112、21111、2121、2112

简单发现除了第三层有点特殊,后续的楼层均符合 dp[i] = dp[i-1] + dp[i-2] - 1

所以在初始化的时候可以将前三层进行初始化

代码

JavaScript

function solution(n) {
    const result = [1, 2, 3];
    for (let i = 3; i < n; i++) {
        result[i] = result[i - 1] + result[i - 2] - 1;
    }
    return result[n - 1];
}

Python

def solution(n):
    dp = [1, 2, 3]
    for i in range(3, n + 1):
        dp.append(dp[i - 1] + dp[i - 2] - 1)
    return dp[n - 1]

PS

这个 AI 有点呆

image.png

image.png