class Permute { // this is problem P9.13 from the textbook // it is similar (but more difficult than) // the phone number mapping quiz question. public static void permuteHelper( int[] prefix, int[] toPermute ) { // this method must consider all orders of numbers // in "toPermute" and append them to "prefix". it // does this recursively. if( toPermute.length == 0 ) { printArray( prefix ); } else { int[] newPrefix = new int[prefix.length+1]; int[] newPermute = new int[toPermute.length-1]; // copy from prefix to newPrefix for( int i=0; i < prefix.length; i++ ) { newPrefix[i] = prefix[i]; } for( int i=0; i < toPermute.length; i++ ) { // try all elements in toPermute // add each one to newPrefix newPrefix[prefix.length] = toPermute[i]; // copy all elements except toPermute[i] // into newPermute array int k=0; for( int j=0; j < toPermute.length; j++ ) { if( j != i ) newPermute[k++] = toPermute[j]; } // call ourselves recursively permuteHelper( newPrefix, newPermute ); } } } public static void permute( int n ) { int[] prefix = new int[0]; int[] toPermute = new int[n]; // initialize the array of values to permute for( int i=0; i