思路:来自官方解答和评论区,从后往前找到一个比它前面值小的数,再从后往前找到比这个数大的第一个数,交换这两个数,然后从此数后一个开始到最后进行升序排列。
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int i=nums.size()-2;
while(i>=0&&nums[i]>=nums[i+1])//从后搜索,找到比前值小的
--i;
int j=nums.size()-1;
if(i>=0)//若存在
{
while(j>=0&&nums[j]<=nums[i])//从后往前找到比目标值大的第一个数
--j;
int mid=nums[i];//交换
nums[i]=nums[j];
nums[j]=mid;
}
sort(nums.begin()+i+1,nums.end());//排序,目标值后一个到结尾升序
}
};