2016-02-13 73 views
-1

所以我試着解釋這個僞代碼的朋友,我不完全確定我的方法返回正確的結果。任何能夠幫助我的人?正確解釋僞代碼? JAVA

我已經做了一些測試用例,例如, [2,0,7]或[0,1,4]或[0,8,0]的數組將返回true,但不會像[1,7,7]或[2,6,0] 。

Array(list, d) 
for j = 0 to d−1 do 
for i = 0 to d−1 do 
for k = 0 to d−1 do 
if list[j] + list[ i] + list[k] = 0 then 
return true 

end if 
end for 
end for 
end for 
return false 

,我已經在Java做出這樣的:

public class One{ 
    public static boolean method1(ArrayList<String> A, int a){ 
    for(int i = 0; i < a-1; i++){ 
     for(int j = 0; j < a-1; j++){ 
      for(int k = 0; k < a-1; k++){ 
       if(Integer.parseInt(A.get(i)+A.get(j)+A.get(k)) == 0){ 
        return true; 
       } 
       } 
      } 
     } 
    return false; 
} 

}

在此先感謝

+0

誰是'n'? ('i fanton

+0

@fanton糾正了它 – Peter

+0

好吧,現在我看到你在一堆東西上調用'parseInt'方法。考慮到你有一個表示爲字符串的整數列表(不知何怪),你可能想要做'Integer.parseInt(A.get(i))+ Integer.parseInt(A.get(j))+ Integer.parseInt( A.get(k))== 0'而不是你在做什麼。 – fanton

回答

0

對於修復您的具體問題,看到我的評論。編寫該代碼的更好的方法是實際使用Integer而不是String的列表,因爲然後您需要將字符串轉換回整數。所以,你的方法看起來更好這樣的:

public static boolean method(List<Integer> A) { 
    for (Integer i : A) 
     for (Integer j : A) 
      for (Integer k : A) 
       if (i + j + k == 0) 
        return true; 
    return false; 
} 

見你甚至不需要大小的參數,因爲在Java中任何List嵌入自己的大小。

不知何故offtopic

你可能試圖解決以下問題:「如果找到一個整數列表包含3對不同那些總結爲0」。解決這個問題的方法不一定是O(n^3),就像你的問題一樣,它可以在O(n^2)中解決。看到這個post

+0

雖然與我的代碼有點不同。在[x,y,0]爲你返回true的情況下,它會爲我的返回false?僞代碼想要什麼? – Peter

+0

僞代碼似乎不關心不同的數字。上面的Java代碼都沒有。不同之處在於:如果您有一個包含從0到N的自然數的數組,您是否希望自己的算法返回false的true? – fanton

0

好吧,所以這裏是我相信僞代碼試圖做的事情。如果列表中有零,或者列表中有三個數字加起來爲零,它會返回true。所以它應該對以下測試用例返回true。 (0,1,2,3,4,5),(1,2,3,4,-3)。 (1,2,3,4,5)將返回false。我只是用d = 5作爲一個隨機的例子。你的代碼大部分都是有用的 - 你只需要在列表中添加第i,第j和第k個元素來檢查它們的總和是否等於零。