class Solution {
public:
void nextPermutation(vector<int>& nums) {
int i=nums.size()-2;//为第一个升序数组对,也就是要交换的下标是0留一手准备。
//如果是i=nums.size()-1,for(int x=i;x>0;x--)零下标无法访问 ,因为比较的是nums[x]和nums[i-1](如果这种思路的话)访问0下标会越界。
while(i>=0&&nums[i]>=nums[i+1])//
{
i--;
}
if(i>=0){//i<0证明是是最大数组(3,2,1)不用swap了
int j=nums.size()-1;
while(j>=0&&nums[i]>=nums[j])
{
j--;
}
swap(nums[i],nums[j]);
}
reverse(nums.begin()+i+1,nums.end());//nums.begin()+i+1,如果数组不管是i=-1时(3,2,1),还是需要swap的情况,还是需要swap元素的下标是0的情况,此代码都能一并解决。
}
};
算法详解:https://leetcode.cn/problems/next-permutation/solution/xia-yi-ge-pai-lie-suan-fa-xiang-jie-si-lu-tui-dao-/