[JAVA] Énumération des modèles de combinaison à l'aide de List

1. Vue d'ensemble

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.

2. Liste des éléments utilisant List

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.

3. Résumé

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

Énumération des modèles de combinaison à l'aide de List
[Android] Affichage des candidats d'entrée à l'aide de la fenêtre contextuelle Liste
Exemple d'utilisation de vue.config.js
Liste des mémos débutants (Liste)
Résumé de l'utilisation de FragmentArgs
Essayez d'utiliser la liste F #
Résumé de l'utilisation de DBFlow
Exemple de paramètres utilisant where
Résumé de l'utilisation de ButterKnife
Exemple d'utilisation d'une classe abstraite
Combinaison de recherche et each_with_index
Limitation de débit à l'aide de RateLimiter of Resilience4j
[Ruby] Liste des commandes de base
Énumération de toutes les combinaisons Java
Liste des emplacements des fichiers hôtes
[Java] Résumé des modèles de conception