题目
思路
分析字典序的排列方式,可以直到,从后往前升序是最大的,那么我们要修改的开始,就是从后往前第一个打破升序的那个位置N,把N和从后往前第一个大于它的数字交换,此时N后面还是降序的,但是此时由于已经把N位置换成了大一点的数字,所以N后面应该降序
代码
class Solution {
public:
int a[110];
void nextPermutation(vector<int>& nums) {
int n=nums.size();
for(int i=0;i<n;i++)a[i]=nums[i];
if(n<=1)return;
int N=-1;
for(int i=n-2;i>=0;i--){
if(nums[i]<nums[i+1]){
N=i;
break;
}
}
if(N==-1){
for(int i=N+1,j=n-1;i<n;i++,j--)nums[i]=a[j];
return;
}
for(int i=n-1;i>=0;i--){
if(nums[i]>nums[N]){
swap(nums[i],nums[N]);
swap(a[i],a[N]);
break;
}
}
for(int i=N+1,j=n-1;i<n;i++,j--)nums[i]=a[j];
return;
}
};