跳台阶-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]

浙公网安备 33010602011771号