6/03/2014

92. Next Permutation

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 条评论:

  1. 1. 找到最后一个i<i+1的数,k=i(k之后的数都是递减的)。
    2. 找到k以后比k大的最后的那个数l(也是比k大的数中最小的)。
    3. 互换k和l的val。
    4. 现在k以后的数还都是递减的,reverse。

    回复删除