爬楼梯问题

一、假设你正在爬楼梯。需要 n 阶你才能到达楼顶

 题目描述:

  假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

  每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

  注意:给定 n 是一个正整数。

 示例 1:

  输入: 2

  输出: 2

  解释: 有两种方法可以爬到楼顶。

  1.  1 阶 + 1 阶

  2.  2 阶

 示例 2:

  输入: 3

  输出: 3

  解释: 有三种方法可以爬到楼顶。

  1.  1 阶 + 1 阶 + 1 阶

  2.  1 阶 + 2 阶

  3.  2 阶 + 1 阶

class Solution:
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n < 0:
            return 0
        if n == 1 :
            return 1
        elif n == 2 :
            return 2
        else:
            return self.climbStairs(n-1) + self.climbStairs(n-2)
#递归是很耗时的

  两种方法,一种是递归,一种是循环。递归的写法简单但性能消耗大,循环的写法也很简单,但性能比递归好太多:

  通过分析,结果序列是:1 2 3 5 8 13 21 ......

class Solution:
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n < 0:
            return 0
        if n == 1 :
            return 1
        elif n == 2 :
            return 2
        else:
            a = 1
            b = 2
            for k in range(3, n+1):
                result = a + b
                a = b
                b = result
            return result

 

posted @ 2019-01-17 17:17  1直在路上1  阅读(330)  评论(0编辑  收藏  举报