2017-03-04 170 views
1

我是python新手。我正在研究分步问题。我有替代解决方案,但想知道我出错的地方。python运行时错误

问题:您是在无限二维网格,其中可以在任意的 的8个方向移动:

(X,Y)到(x + 1,Y),(X - 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

这将是更好的,而不提供一个外部链接 – JuniorCompressor

+1

创建问题的自给自足描述'IND = X.index(一)'返回了''的的_first_ occurence的索引。在枚举(zip(X,Y))中使用'for ind,(a,b):'代替。 –

+0

谢谢拉夫。它有帮助。 – codewarrior

回答

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