问题

n阶楼梯,每次可以爬一或两步,问有多少种登顶的爬法。

思路

因为每次可以爬一步或两步。在第i个梯子上,有多少种爬法取决于在i-1和i-2的梯子上有多少种爬法。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

简单的dp公式为:\(dp[i] = dp[i-1] + dp[i-2]\)

显然这是一个斐波纳契数列,直接用两个变量f1和f2叠加即可。

时间复杂度O(n),空间复杂度O(1)

代码

class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        f1 = 1
        f2 = 0
        for i in range(n):
            f1, f2 = f1+f2, f1
        return f1
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄