class Permutation { // Methode zur Berechnung der Fakultaet static int fak(int n) { int result = 1; for (int i = 1; i <= n; i++) result *= i; return result; } static String[] permute(String str) { int len = str.length(); // Basisfall if (len == 1) return new String[] { str }; /* Eine Ueberlegung zur Verkuerzung der Laufzeit (anstelle der obigen Zeile): * if (len == 2) return new String[] { str, "" + str.charAt(1) + str.charAt(0) }; * Dies erspart Methodenaufrufe, da pro Aufruf ein zweielementiges Array * anstelle eines einelementigen Arrays zurueckgegeben wird. * Beispiel: Permutation eines Strings aus 9 Zeichen: * Fall 1 if (len == 1)...: 623530 Methodenaufrufe * Fall 2 if (len == 2)...: 260650 Methodenaufrufe */ // Rekursionsfall String[] result = new String[fak(len)]; int k = 0; for (int i = 0; i < len; i++) { String help = str.substring(0, i) + str.substring(i+1); // Hier findet die Rekursion statt. // Durch die Verwendung eines Hilfsarrays (permhelp), werden in der // folgenden for-Schleife sehr viele unnoetige Methodenaufrufe gespart. String[] permhelp = permute(help); for (int j = 0; j < fak(len-1); j++) { result[k] = str.charAt(i) + permhelp[j]; k++; } } return result; } public static void main(String[] args) { if (args.length != 1) System.out.println("Bitte eine Zeichenreihe als Parameter eingeben."); else { for (String s: permute(args[0])) System.out.print(s + " "); System.out.println(); } }}