leetcode31. 下一个排列

分析

要得到按照字典序的下一个排列,需要找到当前升序的下一个最大排名,如1,2,4,3->1,3,2,4。只需要[k,end]第一个不满足降序的位置,然后再从这段降序中找到找到一个大于nus[k-1]的值换到前面,那么此时这个字典序已经扩扩大了,要是扩到的最小,那么将这段降序的位置变为升序即可。

class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        int k=nums.size()-1;
        while(k>0&&nums[k]<=nums[k-1])k--;
        if(k==0){
            reverse(nums.begin(),nums.end());
            return ;
        }else{
            int i=k;
            while(i<nums.size()&&nums[i]>nums[k-1])i++;
            swap(nums[i-1],nums[k-1]);
            reverse(nums.begin()+k,nums.end());
        }
        
    }
};