2016-04-17 11 views
-1

Ich habe versucht, dieses Problem zu lösen leetcode - https://leetcode.com/problems/combination-sum/Probleme mit Pass durch Bezugnahme in Java

Mein Testfall ist

Input = [1] 
Result = 1 

Es ist jedoch leer Ergebnis zurückkehrt. Ich denke, der Code geht gut. Ich meine, die Funktion getCombinations fügt dem Ergebnis den Wert 1 hinzu. Aber letztlich ergibt combinationSum ein leeres Ergebnis. Ich denke, es hat mit etwas zu tun, das sich auf Referenz oder etwas bezieht. Irgendwelche Ideen was hätte schiefgehen können?

public class Solution { 
    public List<List<Integer>> combinationSum(int[] a, int target) { 
     Arrays.sort(a); 
     List<List<Integer>> result = new ArrayList<List<Integer>>(); 
     ArrayList<Integer> current = new ArrayList<Integer>(); 
     getCombinations(0, a, result, target,current); 
     return result; 
    } 

    public void getCombinations(int start, int[] a, List<List<Integer>> result, int target, ArrayList<Integer> current) { 
     if(target == 0) { 
      result.add(current); 
      return; 
     } 
     if(target < 0) { 
      return; 
     } 
     for(int i=start;i<a.length; i++) { 
      current.add(a[i]); 
      getCombinations(i+1, a, result,target-a[i],current); 
      current.remove(current.size()-1); 
     } 
    } 
} 
+6

Ihr größtes Problem beim Pass-by-Reference in Java ist die Tatsache, dass die Sprache dies nicht unterstützt. –

+0

Mögliches Duplikat von [Ist Java "pass-by-reference" oder "pass-by-value"?] (Http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass -by-value) –

+0

Das gewünschte Verhalten ist das Ergebnis enthält [1], der Code zu reproduzieren, der in der Frage ist. – fgb

Antwort

1

Sie benötigen eine Kopie current zu erstellen, wenn zu result hinzufügen:

result.add(new ArrayList<>(current)); 

sonst, wenn die Gegenstände aus dem laufenden entfernt werden, dann werden sie aus dem Ergebnis zu entfernen.