import java.util.*;
public class Sample {
public static void main(String[] args) {
var list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
var perm = Permutation.generate(list);
perm.forEach(System.out::println);
}
}
class Permutation {
public static <T> List<List<T>> generate(List<T> list) {
var srcList = new ArrayList<List<T>>();
srcList.add(list);
var dstList = new ArrayList<List<T>>();
dstList.add(new ArrayList<T>());
while(srcList.size() > 0) {
var src = srcList.remove(0);
var dst = dstList.remove(0);
for(var i = 0; i < src.size(); i++) {
if(src.size() > 1) {
var s = new ArrayList<>(src.subList(0, i));
s.addAll(src.subList(i + 1, src.size()));
srcList.add(s);
}
var d = new ArrayList<>(dst);
d.add(src.get(i));
dstList.add(d);
}
}
return dstList;
}
}
[1, 2, 3, 4]
[1, 2, 4, 3]
[1, 3, 2, 4]
[1, 3, 4, 2]
[1, 4, 2, 3]
[1, 4, 3, 2]
[2, 1, 3, 4]
[2, 1, 4, 3]
[2, 3, 1, 4]
[2, 3, 4, 1]
[2, 4, 1, 3]
[2, 4, 3, 1]
[3, 1, 2, 4]
[3, 1, 4, 2]
[3, 2, 1, 4]
[3, 2, 4, 1]
[3, 4, 1, 2]
[3, 4, 2, 1]
[4, 1, 2, 3]
[4, 1, 3, 2]
[4, 2, 1, 3]
[4, 2, 3, 1]
[4, 3, 1, 2]
[4, 3, 2, 1]