1. Arrangement reproductible: ABC a trois caractères et toutes les chaînes de longueur 3, AAA, AAB, AAC ...... CCC a un total de 27 types
En utilisant l'idée de récursivité, le premier caractère peut être sélectionné parmi ABC et trois choix. Ensuite, le problème est transformé en un cas où ABC se compose de caractères de longueur 2. Après la récursivité de boucle, toutes les possibilités peuvent être trouvées. Contrôlez simplement les conditions de sortie de boucle.
La récursivité peut être utilisée pour le traiter, et lorsque la longueur du caractère n'est pas connue, elle est un traitement général. Si vous connaissez la longueur, vous n'avez qu'à utiliser plusieurs couches de boucles pour tirer des conclusions.
classe publique Permutation {public static void main (String [] args) {char [] chs = {'a', 'b', 'c'}; Per (New Char [3], CHS, 3-1); } public static void per (char [] buf, char [] chs, int len) {if (len == -1) {for (int i = buf.length-1; i> = 0; --i) System.out.print (buf [i]); System.out.println (); retour; } pour (int i = 0; i <chs.length; i ++) {buf [len] = chs [i]; per (buf, chs, len-1); }}}Sélection reproductible, un total de 27 situations, les résultats sont présentés dans la figure ci-dessous
2. Arrangement complet: Toujours trois caractères ABC, l'arrangement complet signifie que les caractères ne peuvent pas être répétés. Dernier 3 * 2 = 6 résultats
Vous pouvez utiliser la méthode en 1, et tant que vous déterminez si les trois caractères sont égaux, celui de l'arrangement complet qui n'est pas égal est celui qui est nécessaire. Une telle complexité temporelle est n ^ n, et le type d'arrangement complet est n! Nous devons donc concevoir une sorte de N! algorithme.
Vous pouvez également utiliser la récursivité. Il n'y a pas de choix pour la première chaîne, et le reste devient un problème de récursivité à l'échelle N-1. Les N choix du premier caractère sont tous dans la chaîne. Par conséquent, le premier caractère peut être utilisé pour l'échanger avec la position de 1-N pour obtenir la situation en N, puis traiter récursivement l'échelle de N-1. Cependant, après le traitement, il doit être remplacé et devenir le caractère d'origine.
classe publique Arrange {public static void main (String [] args) {char [] chs = {'a', 'b', 'c'}; organiser (chs, 0, chs.length); } Array de void statique public (char [] chs, int start, int len) {if (start == len-1) {for (int i = 0; i <chs.length; ++ i) System.out.print (chs [i]); System.out.println (); retour; } pour (int i = start; i <len; i ++) {char temp = chs [start]; chs [start] = chs [i]; chs [i] = temp; arrangement (chs, start + 1, len); temp = chs [start]; chs [start] = chs [i]; chs [i] = temp; }}}Les résultats de l'opération sont présentés dans la figure ci-dessous, avec un total de 6 combinaisons
3. Combinaison: toutes les combinaisons de trois caractères ABC
Trouvez toutes les combinaisons, c'est-à-dire si chaque bit d'ABC est sélectionné, le premier bit est 2, et le deuxième bit est 2 ... . Il y a donc 2 ^ n types au total. 0 signifie ne pas prendre, 1 signifie sélection, de sorte que AB peut être représenté par 110. La représentation totale d'ABC est de 0 à 2 ^ 3-1. Ensuite, le fonctionnement du bit, si le résultat est 1, le bit de courant sera sorti et le résultat 0 ne sera pas sorti.
Classe publique Comb {public static void main (String [] args) {char [] chs = {'a', 'b', 'c'}; peigne (chs); } public static void peigne (char [] chs) {int len = chs.length; int nbits = 1 << len; for (int i = 0; i <nbits; ++ i) {int t; pour (int j = 0; j <len; j ++) {t = 1 << j; if ((t & i)! = 0) {// Ce ne sera que 1 lorsque l'opération est 1 System.out.print (chs [j]); }} System.out.println (); }}}Le résultat de sortie est le suivant. Le premier comportement est vide, ce qui signifie que personne n'est pris.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.