Generieren einer alphabetischen Sequenz in Java
Ich bin auf der Suche nach einer Möglichkeit generieren eine alphabetische Reihenfolge:
A, B, C, ..., Z, AA, AB, AC, ..., ZZ.
Kann jeder jeden schlagen eine bequeme Möglichkeit, dies zu tun. Welche Daten Strukturen kann ich nutzen?
Möchte ich Methoden, die sich den nächsten code in der Reihenfolge, und setzen Sie dann die Sequenz.
InformationsquelleAutor der Frage mip | 2012-01-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine version Iterator implementiert und unterhält ein int-Zähler. Die Zähler-Werte übersetzt werden, um den entsprechenden string:
Aufruf next() über den Iterator zu verwenden.
Einer Umsetzung mit besserer Leistung für größere Sequenzen verwendet das gemeinsame Präfix:
Erhalten Sie sogar eine bessere Leistung, wenn Sie diese umschreiben grundlegende Algorithmus durch eine Implementierung, funktioniert mit arrays. (String.charAt, String.substring und StringBuffer ein gewisser Aufwand.)
InformationsquelleAutor der Antwort Thomas Jung
Kombinierte ich Wikipedia Hexavigesimal#Bijektive base-26 und Bijektive Numerierung#Eigenschaften bijektive Basis-k Ziffern zu machen:
Mit Hilfe von Wolfram Alpha. Vielleicht wäre es einfacher gewesen, nur die Umsetzung im ersten link obwohl.
InformationsquelleAutor der Antwort user988346
Einer Online-rekursive Funktion zum erzeugen der string von einem integer:
Beispiel:
Ausgabe:
InformationsquelleAutor der Antwort jon-hanson
beziehen sich auf die Beispiel und ändern wie pro Ihre Anforderungen.
InformationsquelleAutor der Antwort Hemant Metalia
Erstellt habe ich eine iterative und rekursive Lösung unten. Sie finden ein Beispiel im Anschluss an diese Lösungen, die zeigt, wie zu generieren n-Anzahl der Elemente in einer Sequenz mit einem iterator. Auch ging ich code Golfen mit meine rekursive Lösung für Spaß.
Lösungen
Iterative
Rekursive
Nutzung
Beispiel
Den code unten erzeugt die folgende Sequenz von Größe 52:
Main.java
AlphaIterator.java
AlphaUtils.java
Code Golf (89 Byte) 🙂
InformationsquelleAutor der Antwort Mr. Polywhirl
Ich wurde getestet, aber der code ist schlecht...
Machte ich meinen code, dass Arbeit bis zu 256aber Sie können ändern, je nach Bedarf.
BEARBEITET (method fest):
Testen mein code:
Das Ergebnis
Beste Grüße
InformationsquelleAutor der Antwort chepe lucho
Diese Methode erzeugt Alpha-Zeichenfolge
Wenn der Aufruf mit null zurückgegeben A. Wenn man es mit dem Eine es gibt B.
Die Reihenfolge geht wie A, B, C ...... Z, AA, AB, AC ..... AZ, BA, BB, BC.... BZ, CA, CB, CC....CZ, DA......ZA, ZB....ZZ, AAA, AAB, AAC....AAZ, ABA, ABB,... AZZ, BAA, BAB....ZZZ
InformationsquelleAutor der Antwort Murali
Ich würde vorschlagen, einen iterator zurückgeben für den nächsten Wert.
Den iterator muss in der Lage sein, erstellen Sie die Zeichenfolge zurück, basierend auf internen Zähler. Für dein Beispiel wäre es genug mit zwei Zählern. Ein für das erste Zeichen in der Zeichenfolge, und eine für das zweite Zeichen.
Jeder Zähler entsprechen könnte der index in
" ABCDEFGHIJKLMNOPQRSTUVWXYZ"
. Wenn Sie zurückgekehrt sind, eine Zeichenfolge aktualisieren Sie den Zähler für die Letzte position. Wenn es fällt "über die Kante" setzen Sie den Punkt auf "Ein" und erhöhen Sie den nächsten Zähler. Wenn der Zähler wird zu groß, entweder lassen Sie das iterator anzuzeigen, gibt es keine weiteren Elemente mehr, oder setzen Sie den Punkt auf "" je nachdem, was Sie brauchen.Beachten Sie, dass, indem die erste position eine leere, die Sie verwenden können
trim()
auf die Zeichenfolge, um loszuwerden, alle Räume geben "A" für die erste Antwort.InformationsquelleAutor der Antwort Thorbjørn Ravn Andersen
Interessanterweise, niemand hat eine Java-8-basierte funktionale Lösung. Hier ist eine Lösung mit jOOλdie bietet Funktionen wie
range()
für Zeichen, diefoldLeft()
undcrossJoin()
(disclaimer, ich arbeite für die Firma, die behauptet, jOOλ):Diese Lösung ist nicht wirklich schnell (z.B. wie dieser). Ich habe nur Hinzugefügt, es der Vollständigkeit halber.
InformationsquelleAutor der Antwort Lukas Eder
InformationsquelleAutor der Antwort GIRI
Dadurch wird die Sequenz für den übergebenen Wert.
InformationsquelleAutor der Antwort user3637856
Nur weil ich gerne kurze code - ... inspiriert durch Thomas Jung die Antwort:
Beginnt mit 1 →
a
bisLong.MAX_VALUE
→CRPXNLSKVLJFHG
. Verwenden'a'
statt'A'
für Kleinbuchstaben.InformationsquelleAutor der Antwort Paramaeleon
nehmen Sie 'A' to 'Z' wie 26radix.
Beispiel(C++)
InformationsquelleAutor der Antwort user5461120
Warum nicht erstellen Sie die Sequenz rekursiv?
Beispiel (ungetestet):
InformationsquelleAutor der Antwort vIR_uS