Given a list of integers, which denote a permutation.
Find the next permutation in ascending order.
Notice
The list may contains duplicate integers.
Example
For [1,3,2,3]
, the next permutation is [1,3,3,2]
For [4,3,2,1]
, the next permutation is [1,2,3,4]
class Solution {
private:
void swap(vector<int> &num, int left, int right) {
int tmp = num[left];
num[left] = num[right];
num[right] = tmp;
}
public:
/**
* @param nums: An array of integers
* @return: An array of integers that's next permuation
*/
vector<int> nextPermutation(vector<int> &nums) {
// write your code here
vector<int> retVtr = nums;
int pivotIdx = retVtr.size()-1;
for (; pivotIdx>0; pivotIdx--)
{
if (retVtr[pivotIdx-1] < retVtr[pivotIdx])
break;
}
if (pivotIdx > 0)
{
int left = pivotIdx-1;
int right = pivotIdx;
for (int i=pivotIdx; i<retVtr.size(); i++)
{
if (retVtr[i] > retVtr[left])
{
right = i;
}
}
swap(retVtr, left, right);
}
sort(retVtr.begin()+pivotIdx, retVtr.end());
return retVtr;
}
};