import java.util.ArrayList; public class Permutation { public static ArrayList> permutation(final ArrayList olist) { ArrayList list = new ArrayList(); for(Integer i : olist) { list.add(i); } //System.out.println("[ME]Permutateing " + list); ArrayList> output = new ArrayList>(); //System.out.println("[ME] Size is " + list.size()); if(list.size() <= 1) { output.add(list); } else { ArrayList newlist = list; for(Integer i=0; i < list.size(); i++) { //System.out.println("[ME]First element for this permutation is " + newlist.get(0)); Integer firstEntry = newlist.remove(0); for(ArrayList l : permutation(newlist)) { //System.out.println("[ME]This arraylist" + l); ArrayList tmp1 = new ArrayList(); //ArrayList tmp2 = new ArrayList(); tmp1.add(firstEntry); for(Integer i2 : l) { tmp1.add(i2); //tmp2.add(i2); } //tmp2.add(firstEntry); //System.out.println("[ME] This full permutation is " + tmp1 + ", i is " + i + " and size is " + list.size()); output.add(tmp1); //output.add(tmp2); } newlist.add(firstEntry); } } //System.out.println("[ME] Returning " + output); return output; } }