zoukankan      html  css  js  c++  java
  • 爬楼梯问题

    一、假设你正在爬楼梯。需要 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
    
  • 相关阅读:
    面向对象的程序设计-继承
    Chrome开发工具之Console
    面向对象的程序设计-原型模式
    面向对象的程序设计-工厂模式、构造函数模式
    面向对象的程序设计-理解对象
    引用类型-Array类型
    引用类型-Object类型
    单体内置对象
    基本包装类型
    引用类型-Function类型
  • 原文地址:https://www.cnblogs.com/always-fight/p/10283352.html
Copyright © 2011-2022 走看看