Перестановки элементов массива с размерностью N без повторений

Просмотрел не мало тем, но везде или слишком мудрено или не совсем то, что нужно. В общем мне нужен алгоритм (метод), который будет выдавать все возможные комбинации элементов массива.

Например массив 1234, количество вариантов перестановок 4! = 24.

1 1234

2 1243

3 1423

итд.

Нужен по возможности простой и не большой по объему вариант. В метод передается массив, на выход строку (представлял это себе примерно так:

, где ni - номер итерации, str - вариант перестановки на этой итерации.). В целом вывод не принципиален, главное, чтобы алгоритм работал и умещался в метод.