public class Solution {
public void nextPermutation(int[] num) {
int length = num.length;
int k = -1;
int l = -1;
for (int i=0; i<length-1; i++) {
if (num[i]<num[i+1]) k=i;
}
if (k==-1) {
Arrays.sort(num);
return;
}
for (int i=k+1; i<length; i++) {
if (num[i]>num[k]) l=i;
}
int temp = num[l];
num[l] = num[k];
num[k] = temp;
int p = k+1;
int q = length-1;
while (p<q) {
int m = num[p];
num[p] = num[q];
num[q] = m;
p++;
q--;
}
}
}
1. 找到最后一个i<i+1的数,k=i(k之后的数都是递减的)。
回复删除2. 找到k以后比k大的最后的那个数l(也是比k大的数中最小的)。
3. 互换k和l的val。
4. 现在k以后的数还都是递减的,reverse。