LeetCode 31 下一个排列
🟠 中等偏上 https://leetcode.cn/problems/next-permutation/description/
思路
数变大一定是大的数前移了。 如果是很大的数前移,整体数值的确变大,但是不是下一个排列,因此,要刚好大一点的数前移。

class Solution {
public:
void nextPermutation(vector<int>& nums) {
int n = nums.size();
int right = n-2;
while(right>=0&&nums[right]>=nums[right+1]){
right--;
}
if(right==-1){
sort(nums.begin(),nums.end());
}else{
int i = right+1;
int small_bigger_i = i;
while(i<n){
if(nums[i]>nums[right]&&nums[i]<nums[small_bigger_i]){
small_bigger_i = i;
}
i++;
}
swap(nums[right],nums[small_bigger_i]);
sort(nums.begin()+right+1,nums.end());
cout<<small_bigger_i;
}
cout<<right<<endl;
}
};