package array; import java.util.Arrays; /** * @ProjectName: leetcode * @Package: array * @ClassName: Array31 * @Author: markey * @Description:31. ä¸ä¸ä¸ªæå * å®ç°è·åä¸ä¸ä¸ªæåç彿°ï¼ç®æ³éè¦å°ç»å®æ°ååºåéæ°æåæåå ¸åºä¸ä¸ä¸ä¸ªæ´å¤§çæåã * * 妿ä¸åå¨ä¸ä¸ä¸ªæ´å¤§çæåï¼åå°æ°åéæ°æåææå°çæåï¼å³ååºæåï¼ã * * å¿ é¡»åå°ä¿®æ¹ï¼åªå 许使ç¨é¢å¤å¸¸æ°ç©ºé´ã * * 以䏿¯ä¸äºä¾åï¼è¾å ¥ä½äºå·¦ä¾§åï¼å ¶ç¸åºè¾åºä½äºå³ä¾§åã * 1,2,3 â 1,3,2 * 3,2,1 â 1,2,3 * 1,1,5 â 1,5,1 * * æ¥æºï¼åæ£ï¼LeetCodeï¼ * 龿¥ï¼https://leetcode-cn.com/problems/next-permutation * è使å½é¢æ£ç½ç»ææãåä¸è½¬è½½è¯·èç³»å®æ¹ææï¼éåä¸è½¬è½½è¯·æ³¨æåºå¤ã * @Date: 2020/5/3 19:37 * @Version: 1.0 */ public class Array31 { public void nextPermutation(int[] nums) { getNextPermutation(nums); } public static void getNextPermutation(int[] nums) { int max = Integer.MIN_VALUE; int maxJ = -1; int index = nums.length - 1; while( index >= 0){ if( maxJ != -1 && max > nums[index] ){ int minMax = findMinMax(nums,index); swap(nums,index,minMax); break; } if( nums[index] >= max ){ max = nums[index]; maxJ = index; } index--; } if( index != -1){ Arrays.sort(nums,index+1,nums.length); }else { Arrays.sort(nums); } } private static int findMinMax(int[] nums, int index) { Arrays.sort(nums,index+1,nums.length); for (int i = index+1; i < nums.length; i++) { if( nums[i] > nums[index] ){ return i; } } return -1; } public static void swap(int[] nums,int l ,int r){ int tmp = nums[l]; nums[l] = nums[r]; nums[r] = tmp; } }