题目链接: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()); } };