爬楼梯问题 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
# t = [0] * (n+1)
steps = [0 for _ in range(n+1)]

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+1)]
    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/

猜你喜欢

转载自www.cnblogs.com/keithtt/p/9575744.html