给定一个整数数组来表示排列,找出其之后的一个排列。
注意事项
排列中可能包含重复的整数
样例
给出排列[1,3,2,3]
,其下一个排列是[1,3,3,2]
给出排列[4,3,2,1]
,其下一个排列是[1,2,3,4]
class Solution {
public:
/**
* @param nums: An array of integers
* @return: An array of integers that's next permuation
*/
void swap(vector<int> &nums,int a,int b){
// cout<<a<<" "<<b<<endl;
int temp;
temp=nums[a];
nums[a]=nums[b];
nums[b]=temp;
}
void inverse(vector<int> &nums,int k,int n){
int temp;
while(k<n){
temp=nums[k];
nums[k]=nums[n];
nums[n]=temp;
n--;
k++;
}
}
vector<int> nextPermutation(vector<int> &nums) {
// write your code here
int n=nums.size();
if(1==n)
return nums;
int i=n;
int k;
while(nums[i]<=nums[i-1]){
i--;
if(0==i){
inverse(nums,0,n-1);
return nums;
}
}
k=i-1;
i=n;
while(nums[i]<=nums[k]) i--;
swap(nums,k,i);
inverse(nums,k+1,n-1);
return nums;
}
};