标签:leetcode
题意: 找出当前数组排列的下一个排列,按升序,如果没有下一个排列就输出最小的排列public void nextPermutation(int[] num) { int j = num.length - 1; int i = j - 1; boolean find = false; while(i >= 0){//找到第一个非逆降序的元素 if(num[i] >= num[j]){ j --; i --; }else { find = true; break; } } int biggerMin = num[i + 1];//后续序列最大的中间的最小值 int biggerIndex = i + 1; if(find){ for(int k = j; k < num.length; ++ k){ if(num[k] > num[i] && num[k] < biggerMin){ biggerMin = num[k]; biggerIndex = k; } } num[biggerIndex] = num[i]; num[i] = biggerMin; Arrays.sort(num, i+1, num.length);//对交换后的后的后半段元素从小到大排序 }else { i = 0; j = num.length - 1; int temp; while (i < j){//当前排列是最大的情况下 逆序(也就是输出最小的序列) temp = num[i]; num[i] = num[j]; num[j] = temp; i ++ ; j -- ; } } return; }
标签:leetcode
原文地址:http://blog.csdn.net/youmengjiuzhuiba/article/details/45110429