2015-05-13 13 views
6

Dies ist die gegebene Frage: eine nicht negative Zahl dargestellt als eine Anordnung von Stellen angegeben,Array erstes Elemente Entfernen

1 (Inkrementierung der Anzahl der Ziffern dargestellt) zu der Anzahl hinzuzufügen.

Die Ziffern werden so gespeichert, dass die höchstwertige Ziffer am Anfang der Liste steht.

Beispiel:

Wenn der Vektor hat [1, 2, 3]

die zurückgegebene Vektor sein sollte [1, 2, 4]

als 123 + 1 = 124.

Dies ist mein Code:

public class Solution { 
    public ArrayList<Integer> plusOne(ArrayList<Integer> A) {  
     int carry = 1; 
     int length = A.size(); 
     ArrayList result = new ArrayList(); 

     for(int i = length - 1; i >=0; i--){ 
      int val = A.get(i) + carry; 
      result.add(0,val % 10); 
      carry = val/10; 
     } 

     if (carry == 1){ 
      result.add(0,1); 
     } 

     for (int j = 0; j < result.size(); j++){ 
      if(result.get(j).equals(0)) 
       result.remove(j); 
      else 
       break; 
     } 

     return result; 

    } 
    } 

jedoch im Testfall: A : [0, 6, 0, 6, 4, 8, 8, 1]

es sagt meine Funktion

während die richtige Antwort ist

zurück 6 0 6 4 8 8 2

Ich habe keine Ahnung, was mit meinem Code falsch ist.

Danke!

Antwort

7
if(result.get(j).equals(0)) 
    result.remove(j); 
else 
    break; 

Dies wird fehlschlagen, wenn jeder andere Index Hier ist eine 0 enthält, was passiert:

wird entfernt wird
0 6 0 6 4 8 8 2 
^ (j = 0) 

Die 0 und j um eins erhöht.

6 0 6 4 8 8 2 
^(j = 1) 

Dann wird diese 0 auch entfernt, die ersten 6 in Ihrem Array überspringend. Um dies zu beheben, um das Snippet zu ändern:

if(result.get(j).equals(0)) 
    result.remove(j--); 
else 
    break; 

Dies kompensiert, wenn ein Index entfernt wird, so dass j wird die Nummer nicht unmittelbar nach irgendwelchen entfernten 0s überspringen.

+0

bekommen Was passiert, wenn j = 0 hat einen Wert von 0, kein Element gibt in J-- – Sanshayan

+0

@ Sanshai28 ist das '' for (int j = 0; j

+0

@PatrickRoberts Danke jetzt verstehe ich – Sanshayan

0

Schauen Sie sich eine ähnliche Frage an Looping through and arraylist and removing elements at specified index

einfacher gerade

while (!result.isEmpty() && result.get(0).equals(0)) { 
    result.remove(0); 
} 

Dies ließ Entfernen halten zu tun, die 0 bis es nicht mehr ist links die meisten Null gelöscht werden.

+0

Danke für den Hinweis! Ich denke, das ist eine elegantere Möglichkeit, Duplikate vor einer Array-Liste zu eliminieren. –

+0

Um pedantisch zu sein, unter der Annahme, dass die Funktion immer Arrays mit nicht-negativen Ganzzahlen empfängt, wird nach dem Hinzufügen von 1 niemals ein Array leer sein oder leer werden, wenn es diese Schleife erreicht. –

+0

Nun, das Eingabe-Array sollte wahrscheinlich nicht 0 Zahlen vorne an erster Stelle haben und sollte eine nicht negative Zahl enthalten. Wenn Sie es um 1 addieren, gibt es kaum eine Chance, eine 0-Nummer vor dem Ergebnis zu haben. – Nat

0

Ihre letzte for Schleife entfernt 0 von Ihrem Ergebnis ArrayList<Integer>.Nachdem diese Schleife zu entfernen, werden Sie perfekten Ausgang

public static ArrayList<Integer> plusOne(ArrayList<Integer> A) {  
    int carry = 1; 
    int length = A.size(); 
    ArrayList result = new ArrayList(); 

    for (int i = length - 1; i >= 0; i--) { 
     int val = A.get(i) + carry; //2 8 
     result.add(0, val % 10); // 2 8 
     carry = val/10; 
    } 

    if (carry == 1) { 
     result.add(0, 1); 
    } 

// for (int j = 0; j < result.size(); j++) { 
//  if (result.get(j).equals(0)) 
//   result.remove(j); 
//  else 
//   break; 
// } 

    for (boolean isZero = true; isZero;) { 
     isZero = result.get(0).equals(0); 

     if(isZero) 
      result.remove(0); 
    } 

    return result; 
} 
+0

Ok ich werde es korrigieren .. danke – Kushal

+0

@PatrickRoberts Ich habe meine Antwort bearbeitet .. dies ist nach Ihrer Bestellung .. Ausgabe ist: ** [6, 0, 6, 4, 8, 8, 2] ** – Kushal

Verwandte Themen