时间复杂度(O(n)) 空间复杂度(O(1))
class Solution {
public:
void nextPermutation(vector<int>& nums) {
if(nums.size()<2)return ;
bool mark=true;
for(int i=1;i<nums.size();++i)
if(nums[i-1]<nums[i]){
mark=false;
break;
}
if(mark){
int zeroSite=-1;
for(int i=0;i<nums.size()/2;++i){
int tmp = nums[nums.size()-1-i];
nums[nums.size()-1-i] = nums[i];
nums[i] = tmp;
}
}else {
int remainSite = -1;
for(int j=nums.size()-1;j>0;--j){
if(nums[j]>nums[j-1]){
remainSite = j;
break;
}
}
int startIndex=remainSite;
int endIndex=nums.size()-1;
while(startIndex<endIndex){
int tmp = nums[startIndex];
nums[startIndex++]=nums[endIndex];
nums[endIndex--]=tmp;
}
for(int i=remainSite;i<nums.size();++i){
if(nums[remainSite-1]<nums[i]){
int tmp = nums[remainSite-1];
nums[remainSite-1] = nums[i];
nums[i] = tmp;
break;
}
}
}
}
};