Reverse Integer leetcode — wie behandeln überlauf
Das problem ist:
Reverse Ziffern einer Ganzzahl.
Beispiel1: x = 123, Rückkehr 321
Beispiel2: x = -123, zurück -321
Haben Sie bemerkt, dass die umgekehrte integer-überlauf könnte? Angenommen, dass die Eingabe einen 32-bit-Ganzzahl, die dann das Gegenteil von 1000000003 überläuft. Wie sollten Sie mit solchen Fällen?
Werfen eine Ausnahme? Gut, aber was ist, wenn eine Ausnahme zu werfen ist keine option? Sie hätten dann ein re-design der Funktion (dh, fügen Sie einen zusätzlichen parameter).
Die Lösung von der website, die ich Suche ist:
public class Solution {
public static int reverse(int x) {
int ret = 0;
boolean zero = false;
while (!zero) {
ret = ret * 10 + (x % 10);
x /= 10;
if(x == 0){
zero = true;
}
}
return ret;
}
public static void main(String[] args) {
int s = 1000000003;
System.out.println(reverse(s));
}
}
Jedoch, wenn s = 1000000003
die Konsole druckt -1294967295
statt 3000000001
. Also ist diese Lösung immer noch nicht behoben ist das overflow-problem, wenn man keine Ausnahme. Jede Hilfe hier?(Obwohl es einen Hinweis: fügen Sie einen zusätzlichen parameter, ich kann immer noch nicht herausfinden, welche parameter sollte ich hinzufügen)
InformationsquelleAutor CSnerd | 2014-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine Notwendigkeit für einen anderen Datentyp als int.
Stellen Sie nur sicher, wenn es eine operation, erhöht eine Zahl, die Umkehrung der operation sollte Ihnen die Vorherige Zahl. Ansonsten gibt es überlauf.
InformationsquelleAutor user3366372
Über die meisten der Antworten haben ein triviales problem ist, dass der int-Variablen möglicherweise könnte überlaufen. Sie können versuchen, diese : x = -2147483648 als parameter.
Gibt es eine einfache Möglichkeit das problem zu lösen. Konvertiert x zu lange, und überprüfen Sie, ob das Ergebnis >= Integer.MAX_VALUE, sonst 0 zurück.
Die Lösung Bestand alle test-Fälle auf https://leetcode.com/problems/reverse-integer/
Dies ist eine java-version.
C# - version
Python version
Gut, es könnte funktionieren, für Java, aber es ist nicht Sinn machen - keine ganze Zahl mehr sein soll als Integer.MAX_VALUE - das ist der springende Punkt, der MAX_VALUE. Also, der Vergleich ( Ergebnis > Ganzzahl.MAX_VALUE) ist immer false.
Ergebnis ist eine lange, nicht eine int.
Das ist smart, aber ich fühle mich wie Sie behandeln. Was, wenn Sie wurden aufgefordert, umzukehren lange? Wird Sie versuchen, um den Wert zu speichern in BigInteger in diesem Fall?
Aktuelle version das problem Staaten, dass Sie nicht verwenden können
long
:Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range.
InformationsquelleAutor Jiaji Li
Dieser java-code verarbeitet die overflow-Bedingung:
InformationsquelleAutor Apurva Kumar Sinha
Meine Lösung für dieses problem ist das konvertieren von integer eingegeben, c-string, dann wird alles leicht sein wird.
};
InformationsquelleAutor Charles Wang
Dies funktioniert:
Habe ich versucht, die Leistung zu verbessern ein wenig, aber alle die ich gefunden habe, war diese:
Seine C# - Entsprechung ausgeführt wird 5% schneller als die 1. version auf meinem Rechner, aber deren server sagt, es ist langsamer, das kann nicht sein - ich losgeworden zusätzliche Funktion, die hier anrufen, sonst ist es im wesentlichen die gleichen. Er legt mich zwischen 60-30%, je nach Sprache (C# oder Java). Vielleicht hat sich Ihre benchmarking-code ist nicht sehr gut - wenn Sie uns mehrere mal - was-Zeiten variieren sehr.
InformationsquelleAutor Zar Shardan
Ausgänge
Haben Sie bemerkt, die rückwärts von 10 und -10? Oder 20? Sie konnte nur ein String zurückgegeben, zum Beispiel
Funktioniert wie ich es erwarten würde.
InformationsquelleAutor Elliott Frisch
Wenn Sie erforderlich sind, um wieder eine 32 bit int, und müssen noch wissen, ob es ein überlauf-vielleicht könnte man eine Flagge als zusätzlichen parameter. Wenn Sie mit c oder c++ könnte man Zeiger verwenden, um die Flagge, oder in Java kann man ein array verwenden (da Java-Objekte als Wert übergeben).
Java-Beispiel:
Kündigen, wenn die umgekehrte Zahl ist zu groß für eine 32-bit-Ganzzahl, wird das flag.
Hoffe, das hilft.
InformationsquelleAutor suh
Verwendung von string zu speichern, die Rückseite und drucken Sie dann oder verwenden Sie lange oder BigInt
InformationsquelleAutor Vikram Bhat
InformationsquelleAutor Daniel
InformationsquelleAutor nimmi chhabra
Hier werden wir lange zu behandeln, die die over-flow:
InformationsquelleAutor Aakarsh Gupta
Gut Das Passenden Code in Java Können sein:-
InformationsquelleAutor Abhisek Mazumdar
Meine Lösung ohne Verwendung von lange:
InformationsquelleAutor Gemini Jain
Lösung In Swift 4.0 (in Bezug auf problem von https://leetcode.com/problems/reverse-integer/description/)
InformationsquelleAutor redEyeProgrammer
Beachten Sie, dass es zu früheren Lösungen, die funktionieren nicht für die Eingabe: 1000000045
versuchen Sie dies:
InformationsquelleAutor Noy Miran