Ваш подход (насколько я понял) звучит хорошо как первая попытка, хотя доказательство того, что пудинг съест его, так что напишите код и протестируйте его: -)
Обратите внимание, что он не очень хорошо масштабируется, поэтому вопрос в том, сколько символов и сколько строк вы ожидаете генерировать. Если ответ «не много», а производительность / потребление памяти не являются проблемой, хорошо придерживаться самого простого решения, которое работает. В противном случае вам понадобится более сложный алгоритм.
Некоторое время назад у меня была неопределенно похожая задача, когда количество возможных перестановок было настолько велико, что просто не хватало памяти, чтобы вместить каждую из них одновременно. Поэтому мы попытались смоделировать перестановки с помощью чисел: обратите внимание, что любая длинная перестановка n из m символов может быть определена с помощью m базового числа n цифры. Таким образом, путем перебора всех целочисленных значений от 0 до m n , вызов довольно простого метода преобразования возвращает каждую возможную строку одну за другой. Конечно, для значения индекса вам может понадобиться больший целочисленный тип, например long long
, для больших значений m и n .