【发布时间】:2016-02-02 11:58:05
【问题描述】:
我已经尝试过这段代码,但它不起作用,结果为 0。我知道递归代码,但我正在尝试使用 for 循环。
def minsteps(n):
memo =[0]*(n+1)
memo[0] = 0
memo[1] = 0
for i in range(2,n,1):
r = 1+memo[i-1]
if i%2 == 0:
r = min(r, 1+memo[i//2])
elif i%3 == 0:
r = min(r, 1+memo[i//3])
memo[i] = r
return memo[n]
此代码是为了提供一个最小步数,要求某个数为 1,经历负 1、除 2 和除 3 的过程。 例如: 6->2->1 [3] 要么 6->3->1 [3] 要么 6->5->4->2->4 [5]
因此,最小步数为 3。
【问题讨论】:
-
您能解释一下您的代码应该做什么。提供样本输入和预期输出。如果您提供有关您认为问题所在的任何见解,这也会有所帮助。值得您花时间阅读this。
-
我不确定你的函数是做什么的(或应该做什么),但可以肯定的是,由于
range(2,n,1),你将项目修改为n-1(这是范围的最后一个元素),而你最后拿memo[n]。 IE。使用range(2, n+1)? -
您的脚本中还缺少的一件事是
print()命令,编写中间信息。