Сгенерировать все перестановки в Java

Возможный дубликат:
Создание всех перестановок заданная строка

У меня есть массив произвольной длины в Java, и я хотел бы сгенерировать все возможные их перестановки. Простым способом сделать это для фиксированной длины будет серия вложенных циклов for, но поскольку массив имеет неизвестную длину, это не вариант. Есть ли простой способ сделать это на Java?


person chimeracoder    schedule 03.05.2011    source источник
comment
просто введите [java] permutation в поле поиска...   -  person MByD    schedule 04.05.2011
comment
Если это массив, вы можете использовать array.length; если это список, вы можете использовать list.size(). Я не понимаю, не вариант.   -  person duffymo    schedule 04.05.2011
comment
@duffymo: Итак, я хотел бы увидеть, как вы создаете вложенные циклы for на лету, как только вы получаете длину массива в коде ...   -  person Jan Zyka    schedule 04.05.2011
comment
оформить заказ Collections2.permutation гуавы: code.google.com/p/guava-libraries/source/browse/guava/src/com/   -  person Janus Troelsen    schedule 19.01.2014
comment
@JanZyka - это не имеет ничего общего с вложенными циклами, вам просто нужна структура данных стека. В конце концов, все управление потоком — это просто ifs и gotos.   -  person CurtainDog    schedule 15.05.2014
comment
Ирония судьбы :) Я только что сказал, что даже если вы знаете array.length, вы не можете генерировать вложенные циклы array.length на лету в своем коде.   -  person Jan Zyka    schedule 15.05.2014


Ответы (2)


Используйте рекурсивную функцию вместо циклов. Каждый раз, когда вы вызываете метод, он должен быть на меньшей части массива и останавливаться, когда длина = 0. Это ссылка должна помочь вам разработать функцию.

person Jérôme Verstrynge    schedule 03.05.2011

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

person Trott    schedule 03.05.2011