2016-09-27 4 views
-2

Hier ist ein Schnappschuss von a problem on LeetCode:Number Für die Eingabe String: "9646324351"

enter image description here

Für dieses Problem bieten sie diesen Rahmen Code, den Sie ausfüllen müssen in:

public int reverse(int x) { 
} 

Beim Testen Lösungen, scheint es einen unangemessenen Beitrag zu liefern und lässt mich meine Lösung nicht einreichen. Der Fehler ist:

enter image description here

Beachten Sie, dass der Eingang 1534236469 ist. Das passt in eine int als Eingabe, aber die umgekehrte Version, 9646324351, natürlich nicht, wie der maximale positive Wert von int in Java ist 2147483647.

Ist das nur ein Fehler im LeetCode-Test? Oder gibt es einen Trick, den ich mir nicht vorstellen kann, der mich magisch 9646324351 zurückgibt, ein deutlich außerhalb des Bereichs liegender Wert, zurück von reverse als int?

Hier ist mein Code, aber der Code keine Rolle fast nicht, da der Rückgabetyp (int) durch das Problem behoben ist (so durch "integer" bedeuten, dass sie wirklich int, nicht long):

public int reverse(int x) { 
    String intString; 
    StringBuilder sb = new StringBuilder(); 
    if(x < 0){ 
     sb.append("-"); 
     x = x * -1; 
    } 
    intString = Integer.toString(x); 
    for(int i = intString.length() - 1; i >= 0; i--){ 
     sb.append(intString.charAt(i)); 
    } 
    String resultString = sb.toString(); 
    int result = Integer.parseInt(resultString); 
    return result; 
} 
+3

Es ist zu groß. Verwenden Sie Long.parseLong – Eran

Antwort

1

Dies ist ein Fehler im LeetCode-Test. Es gibt einfach keine Möglichkeit, den gewünschten Rückgabewert in einem int zu speichern, also keine Möglichkeit, es von reverse mit dem bereitgestellten Framework-Code zurückzugeben.

Vielleicht wurden die Testfälle über das gesamte Spektrum der int zufällig generierten, nicht berücksichtigt, dass reverse den Wert außerhalb des zulässigen Bereichs für eine int für bestimmte Eingaben erfolgen kann.

Es stellt sich heraus, dass sie möchten, dass Sie 0 zurückgeben, wenn die umgekehrte Zahl außerhalb des Bereichs liegen würde. Nicht, dass sie das irgendwo im Problem erwähnen würden.

+0

* (Warum ist das eine CW-Antwort: Ich bin derjenige, der die Frage wieder geöffnet hat. Ich will keinen Anschein von Unanständigkeit.) * –

+1

Ich bin endlich auf den Grund davon gekommen. Anscheinend wurde dieser Testfall absichtlich eingeführt, und Sie sollten 32 Bit Int Overflow testen und einfach 0 zurückgeben, wenn es passiert. Sie können die Antwort für alle anderen bearbeiten, für die dies nützlich sein könnte. – Fourth

+0

@ Viertens: Erbärmlich von ihnen, um dieses kleine Detail zu verlassen! Das ist nicht einfach eine vernünftige Annahme ... –

1

Sie sollten Long.parseLong() verwenden. Die Zahl ist zu groß für Integer. Der Maximalwert für Ganzzahl ist 2^31-1 = 2147483647.

+2

er wird immer noch nicht in der Lage sein, das Ergebnis in seine Variable zu setzen, weil es ein Int. Die Variable muss eine lange aswell statt int –

+0

sein Danke für die Hilfe, aber bitte lesen Sie meine Bearbeitung – Fourth

+3

@Fourth Es gibt keine Möglichkeit, dass Sie jemals in der Lage sein werden, die Nummer 9646324351 in einem "Int" zu setzen, weil die Nummer ist einfach zu groß, um in ein 'int' zu passen. Wenn Leetcode erfordert, dass Sie genau diese Zahl in ein "int" setzen, dann haben sie Ihnen eine unmögliche Aufgabe gegeben. – Jesper

0

ich fertig mit folge Methode

int result=0; 
    try{ 
     result = Integer.parseInt(stringBuilder.toString()); 
     return result; 
    }catch(Exception e){ 
     return 0; 
    } 
+0

Dies stirbt nicht das Problem des OP gelöst –

Verwandte Themen