Angenommen, ich habe eine Nummer 123. Ich muss sehen, ob ich alle Ziffern von 1 bis einschließlich 9 erhalten habe. Die Zahl 123 hat drei Ziffern: 1,2 und 3. Dann multipliziere ich sie mit 2 und bekomme 246 ( Ich bekomme die Ziffern 2, 4, 6). Dann multipliziere ich es mit 3 und ich bekomme 369. Ich mache weiter inkrementelle Multiplikation, bis ich alle Ziffern bekomme.
Mein Ansatz ist folgender:
%Vor%Ich weiß wirklich nicht, wie ich den booleschen Wert für Ziffern weitermachen kann, die nicht in der ersten Spur oben zusammenpassen, weil ich definitiv irgendeine der ganzen Ziffern in der obigen booleschen Suche bekommen werde. Wie bekomme ich das, wenn bestimmte Ziffern vorhanden sind und manche nicht so sind, dass ich die tatsächliche Zahl multiplizieren kann, um nach den Ziffern zu suchen, die im ersten Versuch nicht gefunden wurden; genauso wie ich es am Anfang definiert habe.
Sie könnten das in eine while-Schleife einfügen und die Zahlen in ein Set
einfügen. Sobald das Set die Größe 10 hat, sind alle Ziffern in der Nummer vorhanden. Ich würde auch vorschlagen, ein long
anstelle eines int
zu verwenden oder du wirst falsche Ergebnisse bekommen oder in eine Exception geraten. Hier ist ein Beispielcode dafür:
Ausgabe:
%Vor% Ich bin mir nicht sicher, was dein Endziel ist. Aber Sie können HashSet
verwenden und so etwas tun, um das zu erreichen, was Sie erreichen wollen:
Ausgabe:
%Vor%ohne java-Sprache zu verwenden Einrichtungen und hashset:
%Vor% Wenn Sie die Zeichen eines String
verarbeiten möchten, tun Sie im Allgemeinen nicht, indem Sie den String in Teilstrings aufteilen. Beachten Sie, dass für alle CharSequence
, einschließlich String
, die Methoden chars()
und codepoints()
die Verarbeitung aller Zeichen als IntStream
erlauben.
Um zu überprüfen, ob alle Ziffern von '0'
bis '9'
vorhanden sind, können wir chars()
verwenden (müssen nicht über Ersatzpaare nachdenken) und tun dies direkt, ordnen Sie sie ihrer tatsächlichen Zahl zu subtrahiere '0'
, filtere alle Nicht-Ziffern heraus (um sicher zu sein), dann ordne sie auf ein int
zu, wobei das n -te Bit gesetzt ist, also können wir binär oder sie alle zusammen und prüfen, ob alle der niedrigsten zehn Bits gesetzt sind:
Als Bonus wird eine Längenprüfung vorangestellt, da ein String
mindestens zehn Zeichen haben muss, um alle zehn Ziffern zu enthalten, so dass wir eine Abkürzung machen können, falls dies nicht der Fall ist.
Nun bin ich mir über Ihre eigentliche Aufgabe nicht sicher. Wenn Sie nur bis zu einer Zahl mit allen Ziffern iterieren möchten, ist es ganz einfach:
%Vor%Wenn Sie jedoch wissen möchten, wann Sie alle Ziffern innerhalb der Sequenz von Zahlen gefunden haben, müssen wir die Testmethode anpassen und das Bitset zwischen den Iterationen beibehalten:
%Vor%%Vor%
Bei dieser Methode werden nur Zahlen der Sequenz gedruckt, die mindestens eine zuvor nicht gefundene Ziffer enthalten, sodass Sie leicht sehen können, welche zu dem vollständigen Satz beigetragen hat, und maximal zehn Ziffern der Sequenz sehen.