class Solution {
public:
void nextPermutation(vector<int>& nums) {
int index = nums.size()-2;
while(index>=0&&nums[index]>=nums[index+1]){
--index;
}
if(index>=0){
for(int i =nums.size()-1;i>index;--i){
if(nums[i]>nums[index]){
swap(nums[i],nums[index]);
break;
}
}
}
reverse(nums.begin()+index+1, nums.end());
}
};
取下一个排列的算法思想是交换左边较小的值和右边较大的值交换,这样保证了下一个排列是增大的。
之后再逆置左边的最小值的右边的排列,这样变化的幅度最小。
即较大数尽量靠右,较小数尽量大。