<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">从最后第二个开始往前遍历,找到第一个并非大于后面数据的数,进行交换,因为最大的数据必定是维持整个数列单调递减</span>
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int n=nums.size();
vector<int>:: iterator it,jt;
int tmp;
for(it=nums.end()-2;it>=nums.begin();it--)
{
for(jt=nums.end()-1;jt>it&&(*it)>=(*jt);jt--);
if(jt!=it)
{
tmp=(*it);
(*it)=(*jt);
(*jt)=tmp;
sort(it+1,nums.end());
return;
}
}
reverse(nums.begin(),nums.end());
}
};
另一种写法
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int n=nums.size();
int i,j;
for(i=nums.size()-2;i>=0&&nums[i]>=nums[i+1];i--);
if(i<0)
{
reverse(nums.begin(),nums.end());
return;
}
for(j=nums.size()-1;nums[i]>=nums[j]&&j>i;j--);
swap(nums[i],nums[j]);
sort(nums.begin()+i+1,nums.end());
}
};