class Solution
{
void swap(int[] nums, int x, int y)
{
int temp = nums[x];
nums[x] = nums[y];
nums[y] = temp;
}
void reverse(int[] nums, int l, int r)
{
while (l < r) swap(nums, l++, r--);
}
public void nextPermutation(int[] nums)
{
int n = nums.length;
int minI = -1;
for (int i = n - 1; i - 1 >= 0; --i)
if (nums[i - 1] < nums[i])
{
minI = i - 1;
break;
}
if (minI == -1)
{
reverse(nums, 0, n - 1);
return;
}
for (int i = n - 1; i >= 0; --i)
if (nums[i] > nums[minI])
{
swap(nums, i, minI);
break;
}
reverse(nums, minI + 1, n - 1);
}
}