показать все возможные множества sets из списка array

как получить все возможные комбинации, в которых значения не повторяются, при том что в комбинации сохраняются все элементы первоначального списка на Java

input:
Set [1,2,3,4,5]
ArrayList {1,1,2,2,3,3,4,5}

output:
1-{1,2,3,4,5}  {1,2,3}
2-{1,2,3,4}  {1,2,3,5}
3-{1,2}  {1,2,3,4,5}  {3}
4-{1} {1,2,3,4,5} {2,3}
5-{1} {1,2,3,4,5} {2} {3}
6-{1,2} {1,2} {3,5} {3,6}
7-{1,2,3} {1,2,3} {5,6}
8-{1,2,3,4} {1,2} {3,5}
9-{1} {1} {2} {2} {3} {3} {4} {5}
и так далее...

Ответы (1 шт):

Автор решения: MBo

Для каждого элемента массива на новом уровне рекурсии:

Вставить его во все наборы, в которые возможно, а также образовать новый набор с единственным элементом.

в которые возможно может быть удобно осуществить не проверкой, а хранением для каждого значения номера последнего набора, в который вставлено это значение.

→ Ссылка