20.11.10 leetcode31

题目链接:https://leetcode-cn.com/problems/next-permutation/

题意:给定一个排列,求出比它大的下一个排列(按字母序,比如135就比126要大,因为第二位3比2大),如果已经是最大的就求最小的排列。

分析:比较好想的就是从最后一位开始按照扫描升序向前扫描,如果扫到某一位不是升序了(从后往前,从前往后这一段是降序),说明这一位要替换掉,从之前扫的那一段里面找比它大的数中最小的,替换之后这一位后面重新从前往后升序排列即可。

class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        int size=nums.size();
        int p=size-1;
        while(p>0&&nums[p-1]>=nums[p]){
            p--;
        }
        if(p>0){
            int tmp=nums[p-1];
            int t=p;
            while(t<size&&nums[t]>tmp)t++;
            nums[p-1]=nums[t-1];
            nums[t-1]=tmp;
        }
        reverse(nums.begin()+p,nums.end());
    }
};
原文地址:https://www.cnblogs.com/qingjiuling/p/13953520.html