public class Solution {
public void nextPermutation(int[] nums) {
/*
假设数组大小为 n
1.从后往前,找到第一个 A[i-1] < A[i]的。也就是第一个排列中的 6那个位置,可以看到A[i]到A[n-1]这些都是单调递减序列。
2.从 A[n-1]到A[i]中找到一个比A[i-1]大的值(也就是说在A[n-1]到A[i]的值中找到比A[i-1]大的集合中的最小的一个值)
3.交换 这两个值,并且把A[n-1]到A[i+1]排序,从小到大。
*/
int size=nums.length;
if(nums==null||size==0||size==1)
return ;
int i=size-2;
while(i>=0&&nums[i]>=nums[i+1])
i--;
if(i!=-1)
{
int j=i+1;
while(j<size&&nums[j]>nums[i])
j++;
j--;
swap(nums,i,j);
}
reverse(nums,i+1,size-1);
}
public void reverse(int []nums,int i,int j)
{
while(i<j)
{
swap(nums,i,j);
i++;
j--;
}
}
public void swap(int []nums,int i,int j)
{
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}