问题描述
-
有个楼梯比较高,我们有多种方式可以走上去,但是在走楼梯时有几个限制:
- 一是每次可以走一或者两步
- 二是不能连续地走两步
那么我们需要计算总共有多少种可能的走法
输入
楼梯的层数,层数n(0 < n < 100)
输出
总共有多少种走法
思路
这道题是 leetcode 70. 爬楼梯 的一个变体,多了一个限制:不能连续地走两步
先来简单的列出来几个示例
| 楼层 | 走法 | 走法 |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 2 | 1、 2 |
| 3 | 3 | 111、12、21 |
| 4 | 4 | 1111、121、112、211 |
| 5 | 6 | 11111、1211、1121、1112、2111、212 |
| 6 | 9 | 111111、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 有点呆