Wie kann ich zählen, wenn eine bestimmte Gruppe von Ziffern in einem Array vorhanden ist?

8

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.

    
RubioRic 09.04.2016, 07:30
quelle

4 Antworten

3

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:

%Vor%

Ausgabe:

%Vor%     
SomeJavaGuy 09.04.2016, 07:51
quelle
3

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:

%Vor%

Ausgabe:

%Vor%     
user2004685 09.04.2016 07:53
quelle
2

ohne java-Sprache zu verwenden Einrichtungen und hashset:

%Vor%     
seyed mohammad madani 09.04.2016 08:20
quelle
2

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:

%Vor%

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.

    
Holger 11.04.2016 10:27
quelle

Tags und Links