python - 为什么我在 LeetCode 上的解决方案不起作用(递归、python)?
问题描述
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。你知道这是为什么吗?太感谢了!
我正在尝试解决斐波那契数列
解决方案
你选择了一个糟糕的算法。并不是它是递归的,只是非常低效。这是一种更有效的递归方法:
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
推荐阅读
- python - Selenium 的多个 URL
- git - git-filter-repo 回调提交或回调消息和 --preserve-commit-hashes 不起作用?
- algorithm - 如何使用哈希函数解析给定的字母
- octobercms - 如何使用我的插件向 RainLab.Blog 添加帖子?
- node.js - Express Get 路由返回错误 500:"Cast to ObjectId failed for value"
- laravel - 为背包中的字段创建刀片文件?
- python - python中的Windows通知
- powerbi - 扩展 PowerQuery OAuth 身份验证功能(StartLogin、FinishLogin、Refresh、Logout)
- html - 为什么元素不在 div 中显示,尽管它在 div 中?
- linux - 如何以非交互方式启用/禁用 Linux 无人值守升级