我正在尝试实现一种算法,以按照此处描述的字典顺序生成唯一排列。以下是我的实现。
void My_Permute(string word) {
sort(word.begin(),word.end());
int size = word.size();
while (true) {
cout << word << endl;
int i = size - 2;
for (; i >= 0; --i) {
if (word[i] < word[i+1]) break;
}
if (i <= -1) break;
swap(word[i],word[i+1]);
cout << word << endl;
reverse(word.begin()+i+1,word.end());
}
}
我确定算法是正确的,那么我的实现有什么问题?我的功能是错过了一些排列。下面显示了我的输出与输入上的 std::next_permutation 的比较abcd
。
My_Permute std::next_permutation
abcd abcd
abdc abdc
abdc acbd
adbc adbc
adcb adcb
dacb bacd
dbca bcad
dcba bcda
dcab bdac
dcba bdca
dcba cabd
cadb
cbad
...