https://leetcode.cn/problems/next-permutation/
思路:
从右向左遍历数组,寻找后一个元素比前一个元素大的下标位置(记为i),如果不存在,说明整个数组递减,排序后返回。然后从右向左寻找第一个比nums[i-1]大的元素,记为j, 交换nums[i-1],nums[j], 反转后返回。
例子:1,5,4,3,2,0
void nextPermutation(vector<int> &nums) {
int n(nums.size());
int i=n-1;
for(;i>0;i--){
if(nums[i]>nums[i-1]) break;
}
if(i==0) {
sort(nums.begin(),nums.end());
return;
}
int j=n-1;
for(;j>i-1;j--){
if(nums[j]>nums[i-1]) break;
}
swap(nums[i-1],nums[j]);
reverse(nums.begin()+i,nums.end());
}