LeetCode 31 下一个排列

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;

    }

};