Leetcode_31. 下一个排列

求下一个排列,由于越后面权重越低,所以从后往前找到第一个递增(指从前往后递增)的位置,然后将这一位替换为后面比他大的最小的数,两者交换,然后把后面的部分再排个序。

code

class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        int n=nums.size();
        int idx=-1;
        for(int i=n-1;i>=1;i--){
            if(nums[i]>nums[i-1]){
                idx=i-1;
                break;
            }
        }
        if(idx!=-1){
            for(int i=n-1;i>=0;i--){
                if(nums[i]>nums[idx]){
                    swap(nums[i],nums[idx]);
                    break;
                }
            }
        }
        auto it=nums.begin();
        for(int i=0;i<=idx;i++){
            it++;
        }
        sort(it,nums.end());
    }
};
posted @ 2020-03-30 09:32  Keane1998  阅读(64)  评论(0编辑  收藏  举报