Below is the syntax highlighted version of Permutations.java
from §2.3 Recursion.
/****************************************************************************** * Compilation: javac Permutations.java * Execution: java Permutations n * * Enumerates all permutations on n elements. * Two different approaches are included. * * % java Permutations 3 * abc * acb * bac * bca * cab * cba * ******************************************************************************/ publicclassPermutations{ // print n! permutation of the characters of the string s (in order) publicstaticvoidperm1(String s){perm1("", s);} privatestaticvoidperm1(String prefix,String s){ int n = s.length(); if(n ==0) StdOut.println(prefix); else{ for(int i =0; i < n; i++) perm1(prefix + s.charAt(i), s.substring(0, i)+ s.substring(i+1, n)); } } // print n! permutation of the elements of array a (not in order) publicstaticvoidperm2(String s){ int n = s.length(); char[] a =newchar[n]; for(int i =0; i < n; i++) a[i]= s.charAt(i); perm2(a, n); } privatestaticvoidperm2(char[] a,int n){ if(n ==1){ StdOut.println(newString(a)); return; } for(int i =0; i < n; i++){ swap(a, i, n-1); perm2(a, n-1); swap(a, i, n-1); } } // swap the characters at indices i and j privatestaticvoidswap(char[] a,int i,int j){ char c = a[i]; a[i]= a[j]; a[j]= c; } publicstaticvoidmain(String[] args){ int n = Integer.parseInt(args[0]); String alphabet ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; String elements = alphabet.substring(0, n); perm1(elements); StdOut.println(); perm2(elements); } }