leetcode 70-爬楼梯 python

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

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

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

示例:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶

第一反应使用递归,递归就是调用函数本身,优点就是代码简洁,但带来的就是时间和空间消耗较大。每一次的函数调动都会在内存栈中分配空间保存参数,返回地址以及临时变量,而且往栈里面压入数据和弹出都需要时间。

class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n == 1:
            return 1
        elif n == 2:
            return 2
        else:
            a = self.climbStairs(n-1)
            b = self.climbStairs(n-2)
            return a + b

​

​

提交的答案超出时间限制,就要考虑使用递推的方法解决这个问题。不同于递归是自己调用自己,递推并不是这样;而且递推不是将问题从复杂变为简单,而是从简单一步步先前发展,得到最终答案,是一个正向的过程;而且递推并不需要知道这里的n;最后,在可以计算的情况下递推的效率是高于递归的。

下面这个代码用到了斐波那契数列的思想:想不到啊= =

class Solution:
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        num = [0, 1, 2]
        if n == 1:
            return num[1]
        if n == 2:
            return num[2]
        else:
            for i in range(3, n+1):
                num.append(num[i-1]+num[i-2])
            return num[n]

猜你喜欢

转载自blog.csdn.net/qq_41010142/article/details/85092217