爬楼梯问题 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/

posted @ 2018-09-02 22:22  KeithTt  阅读(164)  评论(0编辑  收藏  举报