给定一个整数数组来表示排列,找出其之后的一个排列。
样例
给出排列[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
*/
vector<int> nextPermutation(vector<int> &nums) {
// write your code here
int n = nums.size();
int i = n-1;
for (; i > 0; i--)
{
if (nums[i] > nums[i-1])
{
int j = n-1;
for (; j >= i; j--)
{
if (nums[j] > nums[i-1])
{
break;
}
}
swap(nums[i-1], nums[j]);
int left = i;
int right = n-1;
while (left < right)
{
swap(nums[left], nums[right]);
left++;
right--;
}
break;
}
}
if (i == 0)
{
int left = 0;
int right = n-1;
while (left < right)
{
swap(nums[left], nums[right]);
left++;
right--;
}
}
return nums;
}
};