31. Next Permutation

https://www.cnblogs.com/grandyang/p/4428207.html

从数组末尾向前找数字,找到第一个不属于递增序列的数字i,然后在递增序列中找到第一个比i大的数值进行交换,如果没有就拿末尾值与i交换。最后将i+1到末尾的数值进行反向。

注意:1.如果整个数组都没有 nums[i+1] > nums[i],你就需要把整个数组reverse

     2.使用了reverse函数

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

 

posted @ 2019-03-09 12:05  有梦就要去实现他  阅读(73)  评论(0编辑  收藏  举报