爬楼梯问题 leetcode70

假设你正在爬楼梯,需要n阶你才能到达楼顶,n是正整数

每次你可以爬1或2个台阶,有多少种不同的方法可以爬到楼顶

当n=1时,steps=1

当n=2时,1+1,2 steps=2

当n=3时,1+1+1,1+2,2+1 steps=3

当n=4时,1+1+1+1,1+2+1,1+1+2,2+1+1,2+2 steps=5

当n=5时,1+1+1+1+1,1+1+1+2,1+1+2+1,1+2+1+1,2+1+1+1,2+2+1,2+1+2,1+2+2 steps=8

...

经过推算,发现是一个 斐波那契数列

n = 100

# 开辟一个0列表,由于索引从0开始,第100项索引为101,列表长度为101
# 另外当n=1时,0列表长度为2,steps[2]将超出索引范围,所以再加一
# t = [0] * (n+1)
steps = [0 for _ in range(n+2)] steps[1] = 1
steps[2] = 2 for i in range(3, n+1):
steps[i] = steps[i-1] + steps[i-2] print(steps[n])
# 573147844013817084101

使用函数封装一下

def climbStairs(n):
steps = [0 for _ in range(n+2)]
steps[1] = 1
steps[2] = 2
for i in range(3, n+1):
steps[i] = steps[i-1] + steps[i-2]
return steps[n] print(climbStairs(100))
# 573147844013817084101

参考:

https://leetcode-cn.com/problems/climbing-stairs/description/

上一篇:Qt 新手实战项目之手把手打造一个串口助手


下一篇:Leetcode 70.爬楼梯 By Python