目录
问题描述:
走楼梯
现在有一截楼梯,根据你的腿长,你一次能走 1 级或 2 级楼梯,已知你要走 n 级楼梯才能走到你的目的楼层,请实现一个方法,计算你走到目的楼层的方案数。
输入描述:
输入整数n。(1<=n<=50)
输出描述:
输出方案数
代码:
class Solution:
def __init__(self) -> None:
pass
def climbStairs(self, 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]
if __name__ == "__main__":
n = int(input().strip())
sol = Solution()
result = sol.climbStairs(n)
print(result)
代码解读:
def climbStairs(self, n):
# 0阶或者1阶对应一种方案
if n <= 1:
return 1
# 初始化dp长度为n+1, 给定初始值:dp[1]=1,dp[2]=2
dp = [0] * (n + 1)
dp[1] = 1 # 目的地1阶对应1种方案
dp[2] = 2 # 目的地2阶对应2种方案(1阶走两次或者2阶走1次)
for i in range(3, n + 1):
''' 状态转移方程:目的地方案数等于
前一阶的方案数加上前两阶的方案数(对应题目中一次仅能走1阶或2阶)'''
dp[i] = dp[i - 1] + dp[i - 2]
return dp[n]