classSolution{public:voidnextPermutation(vector<int>&nums){constintn=nums.size();// From back to front, find the first num < nums[i + 1]inti;for(i=n-2;i>=0;--i)if(nums[i]<nums[i+1])break;// From back to front, find the first num > nums[i], swap it with nums[i]if(i>=0)for(intj=n-1;j>i;--j)if(nums[j]>nums[i]){swap(nums[i],nums[j]);break;}// Reverse nums[i + 1..n - 1]reverse(nums,i+1,n-1);}private:voidreverse(vector<int>&nums,intl,intr){while(l<r)swap(nums[l++],nums[r--]);}};
classSolution{publicvoidnextPermutation(int[]nums){finalintn=nums.length;// From back to front, find the first num < nums[i + 1]inti;for(i=n-2;i>=0;--i)if(nums[i]<nums[i+1])break;// From back to front, find the first num > nums[i], swap it with nums[i]if(i>=0)for(intj=n-1;j>i;--j)if(nums[j]>nums[i]){swap(nums,i,j);break;}// Reverse nums[i + 1..n - 1]reverse(nums,i+1,n-1);}privatevoidreverse(int[]nums,intl,intr){while(l<r)swap(nums,l++,r--);}privatevoidswap(int[]nums,inti,intj){finalinttemp=nums[i];nums[i]=nums[j];nums[j]=temp;}}
classSolution:defnextPermutation(self,nums:List[int])->None:n=len(nums)# From back to front, find the first num < nums[i + 1]i=n-2whilei>=0:ifnums[i]<nums[i+1]:breaki-=1# From back to front, find the first num > nums[i], swap it with nums[i]ifi>=0:forjinrange(n-1,i,-1):ifnums[j]>nums[i]:nums[i],nums[j]=nums[j],nums[i]breakdefreverse(nums:List[int],l:int,r:int)->None:whilel<r:nums[l],nums[r]=nums[r],nums[l]l+=1r-=1# Reverse nums[i + 1..n - 1]reverse(nums,i+1,len(nums)-1)