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

  • 相关阅读:
    Integer Inquiry
    dfs求最短路径
    5.E
    5.H
    5.C
    5.A
    5.J
    POJ
    POJ
    POJ
  • 原文地址:https://www.cnblogs.com/keithtt/p/9575744.html
Copyright © 2020-2023  润新知