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.
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.
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