class Solution {
public:
void nextPermutation(vector<int>& nums) {
if(nums.empty()) return;
int i=nums.size()-2;
while(i>=0){
if(nums[i]<nums[i+1]) break;
i--;
}
if(i>=0){
int more_min = nums[i+1];
int id = i+1;
for(int j=i+2;j<nums.size();j++){
if(nums[j]>nums[i] && nums[j]<more_min) id=j;
}
swap(nums[i],nums[id]);
sort(nums.begin()+i+1,nums.end());
}else{
reverse(nums.begin(),nums.end());
}
return;
}
};
第一步,从后往前找,找到下一个比当前大的元素,i,如果i小于0,说明没找到,那么就是递减序列的,所以reverse就行了;如果找到了,现在还不能交换,需要看在i+1之后有没有元素,比i大,且比i+1小的,所以遍历,找到了,那么id和i交换,之后,对于i+1之后的序列进行排序。