python运行时错误

时间:2017-03-04 12:29:43

标签: python

我是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

1 个答案:

答案 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