class Solution:
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
if n == 1:
return 1
if n == 2:
return 2
else:
return self.climbStairs(n - 1) + self.climbStairs(n - 2)
但是我的解决方案不适用于Leetcode。你知道为什么吗非常感谢!
我正在尝试解决斐波那契数列
答案 0 :(得分:1)
您选择的算法较差。这并不是说它是递归的,只是效率极低。这是一种更有效的递归方法:
def climbStairs(self, n, res=1, nxt=1):
if n == 0:
return res
return self.climbStairs(n - 1, nxt, res + nxt)
这比您的代码运行速度快得多,并且在堆栈溢出之前可能要高得多。但是最终将导致堆栈溢出。我们可能会更好地添加便笺,但最终,简单的迭代解决方案会更容易:
def climbStairs(self, n): # doesn't use 'self', could be class method
if 0 <= n <= 1:
return 1
a = b = 1
for _ in range(n - 1):
a, b = b, a + b
return b
答案 1 :(得分:1)
您的解决方案看起来不错,但效率低下。如果n == 2部分,则无需寻址。保持简单,就像这样:
class Solution:
def climbStairs(self, n: int) -> int:
if n == 0 or n == 1:
return 1
return self.climbStairs(n-1) + self.climbStairs(n-2)