爬樓梯問題 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
...
通過簡單推算,發現是一個斐波那契數列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

相關文章
相關標籤/搜索