假设你正在爬楼梯,须要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
...
通过简单推算,发现是一个斐波那契数列code
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/ip