【发布时间】:2021-01-07 20:37:05
【问题描述】:
下面是问题描述,然后是使用 Python 的递归解决方案。 该解决方案效率低下。我知道使用记忆,我们可以改进这个解决方案。 我也在 StackOverflow 上遇到过类似的问题,但我无法找到解决方案。我对记忆技术相当陌生。 如果有人可以帮助我解决使用 memoization 的问题,那将非常有帮助。
问题描述: 一只青蛙正在过河。河流被分成若干个单元,每个单元处可能有也可能没有石头。青蛙可以跳上石头,但不能跳入水中。
给定一个按升序排列的石头位置列表(以单位为单位),确定青蛙是否可以通过降落在最后一块石头上过河。最初,青蛙在第一块石头上,并假设第一次跳跃必须是 1 个单位。
如果青蛙的最后一次跳跃是 k 个单位,那么它的下一次跳跃必须是 k - 1、k 或 k + 1 个单位。青蛙只能往前跳。
以下是我使用递归(Python)的解决方案。
class Solution:
def canCross(self, stones: List[int]) -> bool:
return self.helper(stones[0],stones,1)
def helper(self,curr,stones,k):
if curr+k == stones[-1]:
return True
if not curr+k in stones or k<=0:
return False
else:
curr = curr+k
return self.helper(curr,stones,k-1) or self.helper(curr,stones,k) or self.helper(curr,stones,k+1)
【问题讨论】:
标签: python memoization