函数实现原理如下:
在当前序列中,从尾端向前寻找两个相邻元素,前一个记为*i,后一个记为*t,并且满足*i < *t。然后再从尾端寻找另一个元素*j,如果满足*i < *j,即将第i个元素与第j个元素对调,并将第t个元素之后(包括t)的所有元素颠倒排序,即求出下一个序列了。

 

人不学,不知道!

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