加载中...

跳台阶-python

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

数据范围:1≤n≤40
要求:时间复杂度:O(n) ,空间复杂度: O(1)

自己做法与思路

"""
由于这个题不是常规问题,所以需要先找规律,发现从0开始,第0项是1,第一项是1,之后的项成斐波那契数列 f(n)=f(n-1)+f(n-2),所以通过递归调用自身函数来实现,但是这样时间复杂度为为0(2的n次方)
"""
class Solution:
    def jumpFloor(self , number: int) -> int:
        #从0开始,第0项是1,第一项是1
        if number <= 1:   
            return 1
        #根据公式递归调用函数
        return self.jumpFloor(number - 1) +self.jumpFloor(number - 2)

正确做法和思路

#不同于递归,这个方法从正向开始迭代
class Solution:
    def jumpFloor(self , number: int) -> int:
        #从0开始,第0项是1,第一项是1
        if n <= 1:   
            return 1
        res = 0
        a = 1
        b = 1
        #初始化的时候把a=1,b=1
        for i in range(2, n + 1):
        #第三项开始是前两项的和,然后保留最新的两项,更新数据相加
            res = (a + b)
            a = b
            b = res
        return res

递归改良成功版

#通过声明一个类属性,将递归简单化,将递归值存在类对象中,当其他调用
该值时直接读取而不是递归
class Solution:
    def __init__(self):
        self.num=[0 for i in range(41)]
    def jumpFloor(self , number: int) -> int:
        # write code here
        if number<=1:
            self.num[number]=1
            return 1
        if self.num[number-1]==0:
            self.num[number-1]=self.jumpFloor(number-1)
        if self.num[number-2]==0:
            self.num[number-2]=self.jumpFloor(number-2)
        return self.num[number-1]+self.num[number-2]
posted @ 2022-06-06 16:58  最大的敌人是自律  阅读(192)  评论(0)    收藏  举报