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