Простой алгоритм с использованием рекурсии:
ПСЕВДОКОД
getPermutations(CurItemList , CurPermList)
if CurItemList.isempty()
return CurPermList
else
Permutations = {}
for i = 1 to CurItemList.size()
CurPermList.addLast(CurItemList.get(i))
NextItemList = CurItemList.copy()
NextItemList.remove(i)
Permutations.add(getPermutations(NextItemList, CurPermList))
CurPermList.removeLast()
return Permutations
// To make it look better
Permutations(ItemList)
return getPermutations(ItemList, {})
Я не проверял, но должен работать. Возможно, это не самый умный способ сделать это, но это легкий способ.
Если что-то не так, пожалуйста, дайте мне знать!