思路:实现next_permutation() ->思路来自STL源码剖析
step1:从右向左遍历,直到找到下标i,nums[i]<nums[i+1]
step2:从右向左扫描,找到第一个第一个下标j(nums[j]大于nums[i]),两者进行交换
step3:将下标i后面所有的元素进行翻转
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int n = nums.size();
if (n == 1) return ;
int i = n - 2;
while (i >= 0 && nums[i] >= nums[i + 1]) { //加上i >= 0!!!
--i;
}
if (i == -1) {
reverse(nums.begin(), nums.end());
return ;
}
int j = n - 1;
while (nums[j] <= nums[i]) {
--j;
}
swap(nums[i], nums[j]);
reverse(nums.begin() + i + 1, nums.end());
}
};