楼梯有n阶,可以一步上一阶、两阶或三阶,问有多少种不同的走法 由于答案很大,mod(1e9+7)输出
时间: 2023-04-21 09:02:45 浏览: 158
问题描述:有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。
5星 · 资源好评率100%
这是一道动态规划的问题。我们可以用一个数组dp[i]表示到第i阶楼梯的不同走法数。那么dp[i]可以由dp[i-1]、dp[i-2]和dp[i-3]转移而来,因为我们可以从i-1阶、i-2阶或i-3阶走一步到达第i阶。所以dp[i] = dp[i-1] + dp[i-2] + dp[i-3]。
边界条件是dp[1] = 1,dp[2] = 2,dp[3] = 4,因为到第1阶只有1种走法,到第2阶有2种走法(一步一步或者直接跨2步),到第3阶有4种走法(一步一步、一步两步、两步一步、直接跨3步)。
最终答案就是dp[n] mod (1e9+7)。
下面是Python代码实现:
```python
def count_ways(n):
if n == 1:
return 1
if n == 2:
return 2
if n == 3:
return 4
dp = [0] * (n+1)
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]) % (10**9+7)
return dp[n]
n = int(input())
print(count_ways(n))
```
阅读全文