[Java] Ich habe versucht, die Kombination zu implementieren.

Ich habe versucht, eine Kombination von Mathematik in Java zu implementieren

Ich habe versucht, in Java eine Kombination zu implementieren, die verschiedene r aus n verschiedenen herausnimmt. Ich habe Implementierungen gesehen, die so viele Schleifen wie r, Ich dachte über verschiedene Dinge nach, damit es in Ordnung wäre, wenn sich die Teile ändern würden.

Quellcode

Der folgende Code ist so ausgelegt, dass er 3 von 5 nimmt.

import java.util.ArrayList;
import java.util.List;

public class Trial {

    public static void main(String[] args) {
        Trial me = new Trial();
        me.exec(args);
    }

    public void exec(String[] args) {
        //Array von Zeichenfolgen
        String[] strArray = new String[] { "a", "b", "c", "d", "e" };
        //Holen Sie sich die Kombination
        String[][] combinations = getCombinations(strArray, 3);
        //Ergebnisausgabe
        for (String[] combination : combinations) {
            for (String str : combination) {
                System.out.print("  " + str);
            }
            System.out.println();
        }
    }

    private String[][] getCombinations(String[] strArray, int selectCount) {
        //Liste für Verpackungsergebnisse
        List<String[]> list = new ArrayList<>();
        //Ich benutze es ein wenig, also behalte ich es in einer Variablen
        int len = strArray.length;
        //Finden Sie den Maximalwert in Binär aus der Länge des Arrays.
        int dec = 0;
        for (int i = 0; i < len; i++) {
            dec += Math.pow(2, i);
        }
        //Dekrement vom Maximalwert.
        for (int num = dec; 0 < num; num--) {
            //Machen Sie es zu einer Zeichenfolge mit binärer Notation. (0 ist nicht gefüllt)
            String bin = Integer.toBinaryString(num);
            if (!isCombination(bin, selectCount)) {
                //Ignorieren Sie, wenn die Anzahl der Einsen nicht mit der Auswahl übereinstimmt.
                continue;
            }
            int j = bin.length() - 1;
            int tmplen = len - bin.length();
            String[] combination = new String[selectCount];
            int idx = selectCount - 1;
            for (int i = len - 1; tmplen <= i; i--) {
                if (bin.charAt(j--) == '1') {
                    combination[idx--] = strArray[i];
                }
            }
            list.add(combination);
        }
        return list.toArray(new String[0][0]);
    }

    private boolean isCombination(String str, int selectCount) {
        int sum = 0;
        for (int i = 0; i < str.length(); i++) {
            sum += Character.getNumericValue(str.charAt(i));
        }
        if (sum == selectCount) {
            return true;
        }
        return false;
    }
}

Ausführungsergebnis

  a  b  c
  a  b  d
  a  b  e
  a  c  d
  a  c  e
  a  d  e
  b  c  d
  b  c  e
  b  d  e
  c  d  e

Die Kombination von 5 bis 3 ist 5! / (2! * (5-2)!) = 10 Vielleicht passt es.

Schließlich

Ich denke, es gibt viel Raum für Verbesserungen, wenn man die Leistung betrachtet und mit großen Zahlen umgeht.

das ist alles

Recommended Posts

[Java] Ich habe versucht, die Kombination zu implementieren.
Ich habe den Konstruktor (Java) studiert.
Ich habe das Java-Framework "Quarkus" ausprobiert.
Ich habe das neue Yuan-Problem in Java ausprobiert
[Tag: 5] Ich habe die Grundlagen von Java zusammengefasst
[Java] Ich habe die grundlegende Grammatik persönlich zusammengefasst.
Ich ging zum Java Women's Club # 1
Ich habe die Eigenschaften von Java und .NET verglichen
Warum Java die Zielsprache war, hasse ich
Probieren Sie Progate Free Edition [Java I]
Kombinationsberechnung (Pascal-Dreieck) (Java)
[Java] Ich habe versucht, die Kombination zu implementieren.
Generieren Sie die CloudStack-API-URL in Java
Java
Java
Ich habe zuerst Java touched berührt
Ich habe zuerst Java touched berührt
Ich habe zuerst Java touched berührt
Ich habe zuerst Java berührt
[Java] Ich möchte die Differenz zum Datum berechnen
Ich habe die Typen und Grundlagen von Java-Ausnahmen zusammengefasst
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
Was ich über Java 8 recherchiert habe
Ich habe die beiliegende Instanz untersucht.
Ich habe Java Gold gestartet (Kapitel 1-1)
Ich habe das Verhalten von Java Scanner und .nextLine () nicht wirklich verstanden.
[Java] ArrayList → Sollte die Größe bei der Array-Konvertierung angegeben werden?
[JDBC] Ich habe versucht, von Java aus auf die SQLite3-Datenbank zuzugreifen.
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Ich habe den Sammlungsrahmen zusammengefasst.
Ich habe ein Roulette in Java gemacht.
[Rails] Ich habe die Validierungsfehlermeldung mit asynchroner Kommunikation implementiert!
Ich habe Java-Primitivtypen untersucht
Der Java Primer hat die Blockierung bestanden
Ich habe Java SE8 Gold genommen.
Ich habe Drools (Java, InputStream) ausprobiert.
Kombinationsberechnung (Pascal-Dreieck) (Java)
Ich möchte die Java 8 DateTime-API (jetzt) langsam verwenden.
Was ich über Java 7 recherchiert habe
Ich habe versucht, Java REPL zu verwenden
Ich habe das Kotlin-Startbuch gelesen
Ich habe das FizzBuzz-Problem ausprobiert
Bei der Java-Parallelverarbeitung bin ich mir nicht sicher
Ich habe versucht, die CameraX-Bibliothek mit Android Java Fragment zu verwenden
5. Tag von Java
Ich habe versucht, Metaprogrammierung mit Java
[Java] Ich habe über die Vorzüge und Verwendungen von "Schnittstelle" nachgedacht.
Ich möchte die if-else-Anweisung für bedingte Verzweigungen in Java vereinfachen
Was ich über Java 5 recherchiert habe
Eingabe in die Java-Konsole
Ich habe versucht, den Code zu implementieren, um mehrere Bilder gleichzeitig in der Watson Visual Recognition Collection in Java zu lernen
Ich habe ein "Sunshine Ikezaki-Spiel" gemacht, das ich auf Twitter in Java gesehen habe.
Java14 kam heraus, also habe ich vorerst versucht aufzunehmen
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
Ich habe den Eingabe- / Ausgabetyp von Java Lambda ~ Map Edition ~ ausprobiert
Ich habe versucht, die Fehlermeldung beim Ausführen von Eclipse (Java) zu übersetzen.
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
Ich habe versucht, das Java-kompatible FaaS-Formular "Fn Project" auszuführen.
Seit ich Oracle Java Bronze bestanden habe, habe ich die Umrisse des Tests zusammengefasst.
Ich habe versucht, den Kalender mit Java auf der Eclipse-Konsole anzuzeigen.
Greifen Sie mit Java auf die Netzwerkschnittstelle zu