还记得怎么求字符串的排列吗?
void Permutation(vector<int> &num,int i)
{
if (i==num.size())
{
for (int k=0;k<num.size();k++)
{
cout<<num[k]<<" ";
}
cout<<endl;
return ;
}
for (int j=i;j<num.size();j++)
{
swap(num[i],num[j]);
Permutation(num,i+1);
swap(num[i],num[j]);
}
}
这题和上面的一点关系都没有,上题的输出顺序可不是递增的。我不知道当所有数字都相等的时候输出什么,但是下面的算法是给过了。这题也没思考太多,就这样了。
void nextPermutation(vector<int> &num) {
int lenNum = num.size();
if (lenNum==0||lenNum==1)
return ;
vector<int>::iterator iter = num.end()-1;
while(iter != num.begin() && *iter <= *(iter-1))
iter--;
if (iter == num.begin())
{
sort(num.begin(),num.end());
return ;
}
if (iter==num.end()-1)
{
swap(*iter,*(iter-1));
return ;
}
vector<int>::iterator iter2 = num.end()-1;
while(*iter2<=*(iter-1))
iter2--;
swap(*(iter-1),*iter2);
sort(iter,num.end());
}