70. Climbing Stairs

问题

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

思路

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

简单的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
posted @ 2018-10-05 20:10  PilgrimHui  阅读(255)  评论(0编辑  收藏  举报