Énumération de toutes les combinaisons Java

Quand je résolvais le problème que je voulais obtenir toutes les combinaisons de caractères de la chaîne de caractères donnée, je l'ai recherchée et j'ai trouvé le [blog] de chakotay (http://chakotay.jugem.jp/?eid) = 612) avait ce que je cherchais !!!

	public static void permutation(String q, String ans){
		// Base Case
		if(q.length() <= 1) {
			System.out.println(ans + q);
		}
		// General Case
		else {
			for (int i = 0; i < q.length(); i++) {
				permutation(q.substring(0, i) + q.substring(i + 1),
						ans + q.charAt(i));
			}
		}
	}

J'ai été impressionné par le code très concis, même si j'ai cherché diverses choses dont l'anglais !!! Mais je ne sais pas ce qui se passe. .. .. Par conséquent, je voudrais examiner la récursivité étape par étape. A titre d'exemple, regardons le comportement de `permutation (" abc "," ") ʻdans l'ordre.

permutation("abc","")
//q.length=3 alors allez à autre
//i=Quand 0(Ce i est inférieur à 3)
	permutation("bc","a")
	//q.length=2 alors allez à autre
	//i=Quand 0(Ce i est inférieur à 2)
		permutation("c","ab")
		//q.length=1 alors allez à si
		System.out.println("abc");
	//i=Quand 1(Ce i est inférieur à 2)
		permutation("b","ac")
		//q.length=1 alors allez à si
		System.out.println("acb");
	//permutation("bc","a") done	
//i=Quand 1(Ce i est inférieur à 3)
	permutation("ac","b")
	//q.length=2 alors allez à autre
	//i=Quand 0(Ce i est inférieur à 2)
		permutation("c","ba")
		//q.length=1 alors allez à si
		System.out.println("bac");
	//i=Quand 1(Ce i est inférieur à 2)
		permutation("a","bc")
		//q.length=1 alors allez à si
		System.out.println("bca");
	//permutation("ac","b") done	
//i=Quand 2(Ce i est inférieur à 3)
	permutation("ab","c")
	//q.length=2 alors allez à autre
	//i=Quand 0(Ce i est inférieur à 2)
		permutation("b","ca")
		//q.length=1 alors allez à si
		System.out.println("cab");
	//i=Quand 1(Ce i est inférieur à 2)
		permutation("a","cb")
		//q.length=1 alors allez à si
		System.out.println("cba");
	//permutation("ab","c") done	
//permutation("abc","") done

C'est comme ça. Est-ce difficile à comprendre? Je l'ai écrit et compris, mais j'ai souvent admiré que je ne pouvais pas trouver une telle méthode par moi-même.

c'est tout. C'était mon premier message.

Recommended Posts

Énumération de toutes les combinaisons Java
[Java] Type d'énumération
[Java] Présentation de Java
Collection expirée de java
[Java] Importance de serialVersionUID
NIO.2 examen de Java
Avis sur Java Shilber
java --Unification des commentaires
Histoire des annotations Java
java (mérites du polymorphisme)
[Java twig] Énumérer les combinaisons
Examen NIO de Java
Tout sur la programmation Java
[Java] Trois fonctionnalités de Java
Résumé du support Java 2018
À propos des instances Java
[Java] Utilisation de Mirage-Basic de SQL
[Java] Compréhension débutante de Servlet-②
[Java] Pratique de la gestion des exceptions [Exception]
[Java11] Résumé du flux -Avantages du flux-
Principes de base de l'utilisation des caractères (Java)
[Java] Création d'annotations originales
java learning day 4
Java fin du mois plusMonths
[Java] Résumé des expressions régulières
[Java] Résumé des opérateurs (opérateur)
[Java] Implémentation du réseau Faistel
[Java] Comparateur de la classe Collection
Implémenter une combinaison de mathématiques en Java
Résumé des bases du langage Java
Résumé de la classe Java Math
java (héritage du principe is-a)
Avantages et inconvénients de Java
Avantages de la méthode statique Java
[Java] Résumé de la syntaxe de contrôle
Implémentation Java de tri-tree
Résumé du traitement des erreurs Java
[Java] Résumé des modèles de conception
[Java] Résumé des opérations mathématiques
[Java] Comparaison de vitesse de combinaison de chaînes
Pensez à une stratégie de mise à jour Java
[Java] Supprimer les éléments de la liste
[Pour les débutants] Résumé du constructeur java
Diverses méthodes de la classe Java String
À propos de Biocontainers fastqc et Java
Résumé du package [Java Silver Study]
À propos de Lambda, Stream, LocalDate de Java8
Histoire du passage de Java Gold SE8
Trier la liste des objets Java
[Java] DateTimeFormatter sortie par FormatStyle
[Java] Entrez dans le stdin du processus
Utilisation de base de Java Facultatif Partie 1
Gestion des fuseaux horaires avec Java
[Java EE] @ Idée fausse commune de Dependent
Liste des membres ajoutés dans Java 9
[Java] Reflash des valeurs pour tous les éléments de BeanClass
Prise en compte du risque de «changement de politique Java»
Top 7 des sites torrent de tous les temps