LeetCode.70. 爬楼梯

假设你正在爬楼梯。需要 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 阶

思路:

本题类似斐波那契数列。使用分而治之的方法进行处理。
输入n,假设有f(n)种走法,则根据第一步走一阶还是二阶,产生f(n-1)+f(n-2)种走法,即f(n)=f(n-1)+f(n-2),可见到其与斐波那契数列的类似。又有数列的前几项为[0,1,2,3,5]可据此写出代码。

代码:

class Solution:
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        res=[0,1,2,3,5]
        if n<=0:
            return None
        if n<=4:
            return res[n]
        else:
            while n>4:
                res.append(res[-1]+res[-2])
                n-=1
            return res[-1]

分析:

时间复杂度O(n),空间复杂度O(n)
击败83.18%的Python3提交记录

猜你喜欢

转载自blog.csdn.net/u013942370/article/details/82905126