LeetCode:70. 爬楼梯 python3代码

  • Post author:
  • Post category:python


一开始想的很简单,直接用递归

class Solution:
    def climbStairs(self, n: int) -> int:
        if n == 1:
            return 1
        if n == 2:
            return 2
        else:
            return self.climbStairs(n-1)+self.climbStairs(n-2)

这样写直接就提示超出时间限制了,只能计算到37,38开始就超出时间限制

在这里插入图片描述

后来就去学习了一下记忆性递归,将值存在数组中

比如说climbmemo(n-1,memo)已经将climbmemo(n-2,memo)都覆盖到了,那后面只需在数组中找到该值返回即可,不用再去计算一遍

class Solution:
    def climbStairs(self, n: int) -> int:
        memo = [0]*(n+1)
        #a = self.climbmemo(n,memo)
        #return a
        return self.climbmemo(n,memo) #调用climbmemo()函数
    def climbmemo(self,n,memo):
        if memo[n] > 0:   #memo[n] > 0表示数组中已经有这个值了,不用再去计算,直接返回即可
            return memo[n]  
        if n == 1:
            memo[n] = 1
        elif n == 2:
            memo[n] = 2
        else:
            memo[n] = self.climbmemo(n-1,memo)+self.climbmemo(n-2,memo)
        return memo[n]

还有一种简单写法如下,属于动态规划的思想,但又太简单,不能算是动态规划?

class Solution:
    def climbStairs(self, n: int) -> int:
        if n < 3:
            return n
        a = 1
        b = 2
        for i in range(3, n+1):
            tmp = a+b
            a=b
            b=tmp
        return tmp



版权声明:本文为Diana_0411原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。