void permute(string elems, int mid, int end)
{
static int count;
if (mid == end) {
cout << ++count << " : " << elems << endl;
return ;
}
else {
for (int i = mid; i <= end; i++) {
swap(elems, mid, i);
permute(elems, mid + 1, end);
swap(elems, mid, i);
}
}
}
Вышеуказанная функция показывает перестановки str
(с str[0..mid-1]
в качестве устойчивого префикса и str[mid..end]
в качестве перестановочного суффикса). Поэтому мы можем использовать permute(str, 0, str.size() - 1)
, чтобы показать все перестановки одной строки.
Но функция использует рекурсивный алгоритм; возможно, его производительность может быть улучшена?
Есть ли какие-нибудь лучшие методы для перестановки строки?