31. 下一个排列

1  2  7  4  3  1

下一个排列为:

1  3  1  2  4  7

那么是如何得到的呢,我们通过观察原数组可以发现,如果从末尾往前看,数字逐渐变大,到了2时才减小的,然后我们再从后往前找第一个比2大的数字,是3,那么我们交换2和3,再把此时3后面的所有数字转置一下即可,步骤如下:

1  2  7  4  3  1

1  2  7  4  3  1

1  3  7  4  2  1

1  3  1  2  4  7

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

你可能感兴趣的:(31. 下一个排列)