Jusqu'à présent, lors de l'acquisition de tous les modèles de combinaisons, la séquence d'ordre était énumérée par la méthode des anagrammes pour chaque caractère. Par exemple, dans A.B.C, les 3 modèles suivants! (= 6)
ABC
ACB
BAC
BCA
CAB
CBA
Référence: Enumération de toutes les combinaisons Java
Cependant, la méthode ci-dessus ne fonctionnait pas lorsque je voulais traiter une valeur de deux caractères ou plus comme un élément. (* Par exemple, dans le cas de 4.8.10, je voudrais avoir 10 comme un élément, mais comme la recombinaison se produit en unités de caractères, elle sera répertoriée dans le 4! Pattern de 4.8.1.0 comme indiqué ci-dessous).
4810
4801
4180
4108
4081
4018
8410
8401
8140
8104...
Ce qui suit est omis
Par conséquent, je me suis demandé s'il serait possible de réaliser en quelque sorte l'énumération des séquences séquentielles quel que soit le nombre de caractères.
Dans la référence ci-dessus, les modèles de combinaison sont répertoriés à l'aide de String, qui est un ensemble de caractères, et si tel est le cas, l'énumération des modèles doit être réalisable même si l'ensemble est un tableau. Dans la référence ci-dessus, puisque la taille de l'élément est modulée dans la méthode, j'ai eu l'idée d'utiliser List, qui est un tableau de longueur variable.
Ci-dessous, le code créé
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);
}
}
}
Ci-dessous, sortie
[4, 8, 10]
[4, 10, 8]
[8, 4, 10]
[8, 10, 4]
[10, 4, 8]
[10, 8, 4]
Obtention de l'énumération souhaitée des séquences quel que soit le nombre de caractères.
Comme je l'ai codé à la hâte, il existe peut-être une meilleure façon de l'écrire.
Puisque je suis un débutant en programmation et que Qiita est aussi le premier article, j'apprécierais que vous me donniez des suggestions.
Recommended Posts