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; } }