python楼梯有N个台阶,N<25,上楼时可以走一级台阶,也可以走2或3级台阶,求共有多少种走法
时间: 2023-12-14 11:03:50 浏览: 65
这是一个典型的动态规划问题,可以使用递推的方式来求解。设`dp[i]`表示到达第i级台阶的走法总数,则有:
```
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
```
其中,第i级台阶可以由第i-1级、第i-2级或第i-3级台阶走上来。
根据题目要求,N<25,因此我们可以使用一个长度为25的数组来存储所有的走法总数。初始时,第1级台阶有1种走法,第2级台阶有2种走法,第3级台阶有4种走法(分别为1+1+1、2+1、1+2、3)。然后,我们可以使用上面的递推式依次计算出所有的`dp[i]`值,最后返回`dp[N]`即为总的走法数。以下是完整的Python代码实现:
```python
def count_ways(n):
dp = [0] * 25
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]
return dp[n]
n = 10
print(count_ways(n))
```
在这个代码中,我们定义了一个`count_ways`函数,接受一个整数n作为参数,返回走上n级台阶的走法总数。我们首先初始化了一个长度为25的数组`dp`,并将第1级、第2级、第3级台阶的走法总数分别赋值为1、2、4。然后,我们使用一个循环依次计算出所有的`dp[i]`值。最后,函数返回`dp[n]`即为总的走法数。在测试时,我们将n设置为10,输出结果为14。
相关问题
用Python楼梯有 n 阶台阶,上楼可以一步上 1 阶,也可以一步上 2 阶,走完 n 阶台阶共有多少种不同的走法
这是一个经典的斐波那契数列问题,可以使用递归或动态规划来解决。
使用递归:
```python
def climbStairs(n):
if n == 1:
return 1
if n == 2:
return 2
return climbStairs(n-1) + climbStairs(n-2)
```
使用动态规划:
```python
def climbStairs(n):
if n == 1:
return 1
dp = [0] * (n+1)
dp[1] = 1
dp[2] = 2
for i in range(3, n+1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
```
其中,dp[i] 表示走到第 i 阶台阶的不同走法数量。
时间复杂度和空间复杂度均为 O(n)。
用python编写求楼梯有 n 阶台阶,上楼可以一步上 1 阶,也可以一步上 2 阶,走完 n 阶台阶共有多少种不同的走法。的程序
使用动态规划的思想,定义一个长度为 n+1 的列表 dp,dp[i] 表示走到第 i 阶台阶时的不同走法数目。
当 i=0 时,dp[0]=1,表示当前没有台阶需要走,即已经到达终点。
当 i=1 时,dp[1]=1,表示只有一阶台阶,只有一种走法。
当 i=2 时,dp[2]=2,表示有两阶台阶,有两种走法,一步一步走或者一次跨两步。
当 i>2 时,每一步有两种选择,一步或者两步,因此 dp[i]=dp[i-1]+dp[i-2]。
最终 dp[n] 就是楼梯有 n 阶台阶时的不同走法数目。
代码如下:
```python
def climbStairs(n: int) -> int:
if n == 0:
return 1
if n == 1:
return 1
dp = [0] * (n + 1)
dp[0] = 1
dp[1] = 1
for i in range(2, n + 1):
dp[i] = dp[i - 1] + dp[i - 2]
return dp[n]
```
测试:
```python
print(climbStairs(2)) # 2
print(climbStairs(3)) # 3
print(climbStairs(4)) # 5
```
输出结果与预期相符,程序正确。