什么算法能够高效地打印字符串的排列?

nik*_*uru 1 c c++ algorithm

我知道的算法如下,但为什么我讨厌这种方法,它的时间复杂度是O((n + 1)!)在大字符串的情况下更糟糕

首先对字符串进行排序并将其打印为第一个排列.
现在,我们可以找到下一个排列如下:

让我成为输入[i] <input [i + 1]的最后一个索引.如果没有这样的索引,那么我们就完成了.令j为输入[i] <input [j]的最后一个索引.用输入[j]交换输入[i].通过输入[input.length - 1]反向输入[i + 1].

有没有比上面更好的方法?(如果通过代码解释那么请考虑c或c ++)...只是我期待一个更好的算法,时间复杂度比上面的更少

Xia*_*Pei 6

n!对于具有长度的字符串存在排列n.简单地打印它们O(n * n!),你怎么能期望它会更有效率?