#31 下一个排列(字典序)

31. 下一个排列 - 力扣(LeetCode)

从末尾开始,找到第一个降序对,降序对第一个元素标记为k,将k后面的部分升序排列,在后面部分找到第一个大于k的元素与k交换。

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