#31 下一个排列(字典序)
从末尾开始,找到第一个降序对,降序对第一个元素标记为k,将k后面的部分升序排列,在后面部分找到第一个大于k的元素与k交换。
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int i=nums.size()-2;
while(i>=0 && nums[i]>=nums[i+1]) i--;
if(i<0){
sort(nums.begin(),nums.end());
return;
}
sort(nums.begin()+i+1,nums.end());
for(int j=i+1;j<nums.size();j++)
if(nums[i]<nums[j]){
swap(nums[i],nums[j]);
break;
}
return;
}
};