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); } }
原文:https://www.cnblogs.com/Yshun/p/14774106.html