gpt4 book ai didi

python - 优于 LeetCode 的 'climbing stairs' pr*blem 的深度优先搜索解决方案

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:41:48 25 4
gpt4 key购买 nike

我在 LeetCode 上做题,Climbing Stairs ,内容如下:

enter image description here

我想出了以下基于深度优先搜索的解决方案:

class Solution:
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
stack = [Node()]
ways = 0
while stack:
node = stack.pop()
if node.reached_top(n):
ways += 1
stack.extend(node.get_neighbors(n))
return ways


class Node(tuple):
def get_neighbors(self, n):
return [Node(list(self) + [steps]) for steps in (1, 2) if sum(self) + steps <= n]

def reached_top(self, n):
return sum(self) == n

例如,Solution().climbStairs(2) == 2Solution().climbStairs(3) == 3 根据需要。问题是这个解决方案超过了 35 输入的时间限制:

enter image description here

深度优先搜索似乎是解决这个问题的一种相当有效的算法,但显然,事实并非如此;关于如何改进我的解决方案的任何想法?

最佳答案

最简单的方法是根据 solution(n) = solution(n-1) + solution(n-2) 这一事实来计算每个答案。从 solution(1) = 1solution(2) = 2 开始,您可以轻松计算出 solution(3)solution(4) 等。根据需要计算该数组。

这段代码会足够快。

实现后谷歌的方向是“动态规划”和“斐波那契数列”。在这两者中,动态规划是更重要的学习内容。

关于python - 优于 LeetCode 的 'climbing stairs' pr*blem 的深度优先搜索解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48872336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com