我是python的新手。我正在研究最小步问题。我有替代解决方案,但想知道我哪里出错了。
问题:您处于无限的2D网格中,您可以在其中移动任何一个 8个方向:
(x,y)至(x + 1,y),(x-1,y),(x,y + 1),(x,y-1),(x-1,y-1) , (x + 1,y + 1),(x-1,y + 1),(x + 1,y-1)。给你一系列的分数 以及您需要覆盖积分的顺序。尽量减少 您可以实现它的步骤数。你从第一个开始 点。
输入:[(0,0),(1,1),(1,2)] 输出:2
我尝试了以下方法,其中X代表x坐标,Y代表Y坐标。我发现以下输入失败了。预期的输出是108,我得到118. y坐标的差异为19,5,7,10,25,4,11,2
X:[4,8,-7,-5,-13,9,-7,8] Y:[4,-15,-10,-3,-13,12,8, -8]
我观察到它在最后两次迭代中失败了。我尝试打印y坐标差异,发现11和2即将到来,不明白他们为什么会来。非常需要任何帮助。在此先感谢。
def coverPoints(self, X, Y):
count=0
if(len(X)<=1):
return 0
for (a,b) in zip(X,Y):
ind = X.index(a)
if(len(X)==ind+1):
break
m=X[ind+1]-a
n=Y[ind+1]-b
if(m<0):
m=-m
if(n<0):
n=-n
if(m<=n):
print(n)
count=count+n
else:
print(n)
count=count+m
return count
答案 0 :(得分:0)
罗宁的回答有所帮助。这是经过修改的解决方案。
def coverPoints(self, X, Y):
count=0
if(len(X)<=1):
return 0
for ind,(a,b) in enumerate(zip(X,Y)):
if(len(X)==ind+1):
break
m=X[ind+1]-a
n=Y[ind+1]-b
if(m<0):
m=-m
if(n<0):
n=-n
if(m<=n):
count=count+n
else:
count=count+m
return count