void nextPermutation(vector<int>& nums) {
int k = nums.size() - 1;
while(k > 0 && nums[k - 1] >= nums[k]) k --;
//整体逆序
if(k == 0) reverse(nums.begin(),nums.end());
else {
//找k以后大于k - 1的最小值
int t = k;
while(t < nums.size() && nums[t] > nums[k - 1]) t ++;
swap(nums[k - 1],nums[t - 1]);
reverse(nums.begin() + k,nums.end());
}
}