import java.security.InvalidParameterException; import java.util.ArrayList; import java.util.List; public class Permut2 { public static void permut(List tail, String acc) { if(null == tail) { throw new InvalidParameterException("Tail can't be null"); } if(null == acc) { throw new InvalidParameterException("Acc can't be null"); } if(0 == tail.size()) { System.out.println(acc); } List alreadyDone= new ArrayList(); for(String s : tail) { if(!alreadyDone.contains(s)) { alreadyDone.add(s); List newTail = new ArrayList(); boolean skipped = false; for(String t : tail) { if(s.equals(t)) { if(skipped) { newTail.add(t); } else { skipped = true; } } else { newTail.add(t); } } permut(newTail, acc+s); } } } public static void main(String[] args) { if(args.length < 1) return; List tail = new ArrayList(); for(char c : args[0].toCharArray()) { tail.add(new String(new char[] {c})); } permut(tail,""); } }