思路:
1.从后往前遍历,找到第一个升序
2.如果没有,把原排列翻转一下
3.如果有,在后面的序列中找到比[k-1]大,但比[k]小的数
class Solution {
public:
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
{
int t = k;
while(t < nums.size() && nums[k - 1] < nums[t]) t ++;
swap(nums[k - 1], nums[t -1]);
reverse(nums.begin() + k, nums.end());
}
}
};