1. 程式人生 > >LeetCode-31. 下一個排列

LeetCode-31. 下一個排列

題目地址:https://leetcode-cn.com/problems/next-permutation/
思路:第一種 STL提供了直接的函式,這裡不贅述。要求字典序最小,那麼儘可能我們去修改靠後的數字。於是從後往前,找第一個能被較大值替換的值,然後將它與之後比他大的最小值交換,再將其後所有數字從小到大排列即可。
AC程式碼:

class Solution {
public:
       
    void nextPermutation(vector<int>& nums) {
        int n = nums.size();
        int maxx = nums[n-1];
        int flag = -1;
        for(int i = n-2;i>=0;i--){
            if(maxx>nums[i]){
                for(int j = n-1;j>i;j--){
                    if(nums[j]>nums[i]){
                        int temp = nums[j];
                        nums[j] = nums[i];
                        nums[i] = temp;
                        break;
                    }
                }
                flag = i;
                break;
            }
           if(maxx<nums[i])
               maxx = nums[i];
        }
        sort(nums.begin()+flag+1,nums.end());
    }
};