
class Solution {
public:
void nextPermutation(vector<int>& nums) {
// 我要比你大,还大的最小
// 较小数尽量靠右, 所以从右往前找
// 较大数尽可能小
int i = nums.size()-2;
// 寻找较小数
while(i>=0&&nums[i]>=nums[i+1]){
i--;
}
// cout<<"i: "<<i<<endl;
// 如果i小于0,说明整个数组都是降序排列,直接返回升序排列结果
if(i<0){
sort(nums.begin(), nums.end());
return;
}
// 因为i之后的肯定都是降序排列,所以直接从后往前找较大值
int j = nums.size()-1;
while(j>=0&&nums[i]>=nums[j]){
j--;
}
swap(nums[i],nums[j]); // 交换较大值与较小值
sort(nums.begin()+i+1,nums.end()); // 将 i后面的元素升序排列。
return;
}
};
class Solution {
public:
void nextPermutation(vector<int>& nums) {
// 最快的方法
next_permutation(nums.begin(), nums.end());
return;
}
};