这题我记得一刷就卡过。二刷依然卡。。
4321这样的话,说明没有下一个了,就返还1234.
大多数情况是有下一个的,从右边开始找,找到第一个不是递增的地方,然后和右边遍历过的所有元素中,不小于他的最小元素交换。
交换之后,找到位置右边的所有数字必须变成递增,SORT一下就可以。
大概这么个思路,第一次做的时候这个规律墨迹了好久好久。。
public class Solution
{
public void nextPermutation(int[] nums)
{
if(nums.length == 2)
{
int temp = nums[0];
nums[0] = nums[1];
nums[1] = temp;
return;
}
for(int i = nums.length-2;i>=0;i--)
{
if(nums[i] < nums[i+1])
{
int min = i+1;
for(int j = i+1; j < nums.length;j++)
{
if(nums[j] > nums[i])
{
min = j;
}
else break;
}
swap(nums,min,i);
Arrays.sort(nums,i+1,nums.length);
return;
}
}
Arrays.sort(nums);
}
public void swap(int[] nums, int a, int b)
{
int temp = nums[a];
nums[a] = nums[b];
nums[b] = temp;
}
}