class Solution {
public:
    /**
        由给出数组求得比其大一位的字典序排列-》大,则前面的小数要和后面的大数交换才能变大-》要变大得尽可能小,那么找到最小应该交换的位-》从后向前找到第 一个比后面的数小的数,与最后一个数交换(后面的数呈向前递增趋势,最后一个数最小)-》因为已经在一位上进行了变大,后面的位就要尽可能的小,即排序-》再把后面的数排序
     */
    vector<int> nextPermutation(vector<int>& nums) {
        if(nums.size() == 0 || nums.size() == 1){
            return nums;
        }

        for(int i=nums.size()-2; i>=0; i--){
            if(nums[i] < nums[i+1]){
                swap(nums[i], nums[nums.size()-1]);
                sort(nums.begin()+i+1, nums.end());
                return nums;
            }else{
                continue;
            }
        }

        sort(nums.begin(), nums.end());
        return nums;
    }
};