[JAVA] Aufzählung von Kombinationsmustern mit List

1. Übersicht

Bisher wurde beim Erfassen aller Kombinationsmuster die Reihenfolge nach der Anagrammmethode für jedes Zeichen aufgelistet. Zum Beispiel in ABC die folgenden 3! (= 6) Muster

ABC
ACB
BAC
BCA
CAB
CBA

Referenz: Aufzählung aller Java-Kombinationen

Die obige Methode funktionierte jedoch nicht, als ich einen Wert von zwei oder mehr Zeichen als ein Element behandeln wollte. (* Zum Beispiel möchte ich im Fall von 4.8.10 10 als ein Element haben, aber da die Rekombination in Einheiten von Zeichen erfolgt, wird sie im 4! -Muster von 4.8.1.0 aufgeführt, wie unten gezeigt).

4810
4801
4180
4108
4081
4018
8410
8401
8140
8104...
Folgendes wird weggelassen

Daher fragte ich mich, ob es möglich wäre, die Aufzählung von sequentiellen Sequenzen unabhängig von der Anzahl der Zeichen irgendwie zu realisieren.

2. Liste der Elemente mit List

In der obigen Referenz werden die Kombinationsmuster mit String aufgelistet, einem Satz von Zeichen. In diesem Fall sollte die Musteraufzählung auch dann möglich sein, wenn es sich bei dem Satz um ein Array handelt. Da in der obigen Referenz die Größe des Elements in der Methode moduliert wird, kam mir die Idee, List zu verwenden, ein Array mit variabler Länge.

Unten der erstellte Code


    public static void main(String[] args) {
        String[] sArray = {"4", "8", "10"};
        List<String> sList = new LinkedList<>(Arrays.asList(sArray));
        List<String> cList = new LinkedList<>();
        permutation(sList, cList);
    }
    
    private static void permutation(List<String> sList, List<String> cList) {
    	for (int i = 0; i < sList.size(); i++) {
    		if (sList.size() == 1) {
    			cList.addAll(sList);
    			System.out.println(cList);
    		} else {
    			List<String> base = new LinkedList<>(sList);
    			List<String> container = new LinkedList<>(cList);
    			container.add(base.get(i));
    			base.remove(i);
    			permutation(base, container);
    		}
    	}
    }  

Unten Ausgabe

[4, 8, 10]
[4, 10, 8]
[8, 4, 10]
[8, 10, 4]
[10, 4, 8]
[10, 8, 4]

Erzielte die gewünschte Aufzählung von Sequenzen unabhängig von der Anzahl der Zeichen.

3. Zusammenfassung

Da ich es in Eile codiert habe, gibt es möglicherweise einen besseren Weg, es zu schreiben.

Da ich ein Anfänger in der Programmierung bin und Qiita auch zum ersten Mal veröffentlicht, würde ich mich freuen, wenn Sie mir Vorschläge machen könnten.

Recommended Posts

Aufzählung von Kombinationsmustern mit List
[Android] Anzeige von Eingabekandidaten über das Listen-Popup-Fenster
Beispiel für die Verwendung von vue.config.js
Liste der Anfänger (Liste) Memo
Zusammenfassung der Verwendung von FragmentArgs
Versuchen Sie es mit der F # -Liste
Zusammenfassung der Verwendung von DBFlow
Beispiel für Parameter mit where
Zusammenfassung der Verwendung von ButterKnife
Beispiel für die Verwendung einer abstrakten Klasse
Kombination von Suche und jedem_mit_Index
Ratenbegrenzung mit RateLimiter of Resilience4j
[Ruby] Grundlegende Befehlsliste
Aufzählung aller Kombinationen Java
Liste der Speicherorte der Hosts
[Java] Zusammenfassung der Entwurfsmuster