package leetcode;
public class demo_31 {
public void nextPermutation(int[] nums) {
int i;
int j;
for(i=nums.length-1;i>0;i--) {
//从右往左寻找出nums[i-1]<nums[i]
if(nums[i-1]<nums[i]) {
int min=i;
//从i开始寻找最小的一个但是大于nums[i-1]的位置
for(j=nums.length-1;j>=i;j--) {
//从i开始的数组是非降序的,第一个大于nums[i-1]的就是最小的
if(nums[j]>nums[i-1]) {
min=j;
break;
}
}
//交换nums[i-1]和nums[min]的位置
int k=nums[i-1];
nums[i-1]=nums[min];
nums[min]=k;
break;
}
}
//因为从i开始都是非降序的,所以要调整为从i开始最小的数组
j=nums.length-1;
while(i<j) {
int k=nums[i];
nums[i]=nums[j];
nums[j]=k;
i++;
j--;
}
for(int k:nums) {
System.out.print(k+" ");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
demo_31 d31=new demo_31();
int[] nums= {2,3,1,3,3};
d31.nextPermutation(nums);
}
}