Вашего подхода (насколько я понял его) хорошо звучит как первую попытку, хотя доказательство пудинга ест его, так что писать код и протестировать его :-)
Обратите внимание, что он выиграл 't масштабируется очень хорошо, поэтому вопрос заключается в том, сколько символов и сколько строк вы ожидаете получить. Если ответ «не так много», а потребление производительности/памяти не является проблемой, вполне нормально придерживаться простейшего решения, которое работает. В противном случае вам нужен более сложный алгоритм.
У меня была смутно подобная задача некоторое время назад, где количество возможных перестановок было настолько велико, что было просто недостаточно памяти для хранения каждого в одно и то же время. Таким образом, мы попытались смоделировать перестановки с номерами: обратите внимание, что любая п долго перестановка м символов может быть определена с м базового числом п цифр. Таким образом, путем повторения всех целых значений от 0 до m n, вызывая довольно простой метод преобразования, вы получаете каждую возможную строку один за другим. Для значения индекса, конечно, вам может потребоваться использовать более крупный целочисленный тип, например long long
, для больших m и n значения.
Как вы хотите, чтобы программа вела себя с более чем двумя символами ввода? –
Что происходит, когда выдается три символа? Вам все еще нужны все строки длины - два, которые используют только эти символы, или длина вывода также будет равна трем? (Кроме того, если это домашнее задание, используйте тег 'homework') –
Ну, BlueRaja, я забыл упомянуть, что длина строки не зависит от количества символов ввода ... поэтому у меня может быть 2 входа, а длина строки может должно быть 3 символа, поэтому выход будет следующим: aaa, aab, aba, abb, baa, bab, bba, bbb – sikas