【发布时间】:2018-06-25 09:57:11
【问题描述】:
我目前正在处理一个 python 问题:
给定从 -infinity 到 +infinity 的数轴。您从 0 开始,可以向左或向右。条件是在第 i 步中,你走 i 步。第一步走1步,第二步走2步,以此类推。 提示:3 可以通过 2 个步骤 (0, 1) (1, 3) 达到。 2 可以分 3 步到达 (0, 1) (1,-1) (-1, 2)
a) 找到到达位置 1000000000 和 -1000000000 的最佳步数。
我已经成功编写了以下代码:
def steps(source, step, dest):
if abs(source) > dest:
return sys.maxint
if source == dest:
return step
pos = steps(source+step+1, step+1, dest)
neg = steps(source-step-1, step+1, dest)
return min(pos, neg)
问题是即使这个函数给了我正确的答案,它也不能扩展到我要求的范围。有没有办法解决这个问题,还是我必须采用不同的方法来解决这个问题?
【问题讨论】:
-
这感觉像是 dynamic programming / memoization 的工作。
-
勾勒出一个动态规划算法似乎应该很简单,但我不确定它在多大程度上可以扩展到给定的数字。
-
@Robᵩ 不,简单的贪婪。