题目

题解

这道题不好理解,具体的题解见leetcodeGrandyang

class Solution {//这道题不好理解,最好直接记方法
public:
    void nextPermutation(vector<int>& nums) {
        int n = nums.size(), i = n-2, j = n-1;//定义n的长度,双指针分别指向最后两个个数
        while(i>=0 && nums[i] >= nums[i+1]) i--;//刚开始都是升序的,i指向第一个降序数字
        if(i >= 0){//i<0说明全是升序,直接翻转整个数组就好
            while(nums[j] <= nums[i]) j--;
            swap(nums[i],nums[j]);
        }//i>=0,就从右找第一个比i处数字小或等于的数,然后交换i,j处的数
        reverse(nums.begin()+i+1,nums.end());//翻转整个数组
    }
};