下一个排列
class Solution {
public:
void nextPermutation(vector<int>& nums) {
//双指针法 - 探索规律去做题
if(nums.size() == 0) { return; }
int left = nums.size() - 1;
int right = left;
while(left > 0) {
if(nums[left-1] >= nums[left]) { left--; }
else { break; }
}
left--;
//特殊条件1
if(left == -1) {
//证明整个序列为降序
reverse(nums.begin(), nums.end()); //反转整体nums即可
return;
}
while(nums[right] <= nums[left]) { right--; }
swap(nums[left], nums[right]);
//然后对[left+1, n]进行逆置
reverse(nums.begin() + left + 1, nums.end());
}
};
题解请看官方题解, 一目了然, 其实也就是一种思路, 不会就是不会, 回了就很简单,有点贪心。