//Torbert, 11.12.2003 import java.util.ArrayList; public class Permute { public static void main(String[] args) { ArrayList list = new ArrayList(); String s = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; permute(s, "", list, s.length()); System.out.println(list); // empty(list); // System.out.println(); // // permute("AACD", "", list, 2); // System.out.println(list); } public static void empty(ArrayList al) { while(!al.isEmpty()) al.remove(al.size() - 1); //Do not use remove(0), shifts left = O(n) = bad. //If this was a LinkedList, though, the thinking //is reversed and you DO use remove(0) = O(1). } public static void permute(String s, String t, ArrayList al, int n) { if(t.length() == n) al.add(t); else { String r = ""; for(int k = 0; k < s.length(); k++) { if(r.indexOf(s.charAt(k)) == -1) { permute(s.substring(0, k) + s.substring(k + 1), t + s.charAt(k), al, n); r = r + s.charAt(k); } } } } }