我试图找到给定字符列表的所有排列,在本例中为'eta'
std::string s="eta";
do
{
std::cout<<s<<std::endl;
}while(std::next_permutation(s.begin(),s.end()));
我会得到以下输出:
eta
tae
tea
但如果我改变了一件事
std::string s="eta";
到
std::string s="aet";
输出现在变为
aet
ate
eat
eta
tae
tea
这是我期望的正确排列数; 因此,当“加扰”字符串按字母顺序排列时,显然会出现不同的情况?
或者造成这种歧义的原因是什么?
答案 0 :(得分:8)
next_permutation
将序列更改为所有排列的排序顺序中的下一个排列。因此,如果你从一个不是词典顺序中第一个的排列开始,那么在next_permutation返回false之前,你将只得到所有排列的一部分。
答案 1 :(得分:3)
正如izomorphius指出的那样,下一个排列在最后推进的排列上停止。因此,如果您想要所有这些,只需sort
字符列表。
答案 2 :(得分:1)
next_permutation将范围[first,last]中的元素重新排列为按字典顺序排列的元素的下一个更大的排列,
所以输出没有问题:)