题目链接:https://leetcode.com/problems/next-permutation/
题意:找出序列的下一个字典序排列
思路:从右往左找到第一个满足a[i-1]<a[i]的两个数,然后找到a[i-1]右边恰好大于它的数,并和它交换,最后将a[i-1]右边的所有数排序
代码:
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int flag = 0;
for(int i = nums.size()-1; i>=1; i--){
if(nums[i-1]<nums[i]){
flag = 1;
sort(nums.begin()+i,nums.end());
int j = upper_bound(nums.begin()+i,nums.end(),nums[i-1])-nums.begin();
swap(nums[i-1],nums[j]);
sort(nums.begin()+i,nums.end());
break;
}
}
if(flag == 0){
sort(nums.begin(),nums.end());
}
}
};