public void nextPermutation(int[] num) {
        int i = num.length - 2;
        int j = num.length - 1;
        while(j >= 1){
            if(num[j] > num[i]){
//                int tmp = num[i];
//                num[i] = num[j];

                for(int k = j+1, l = num.length - 1; k < l; ++k, --l){
                    int tmp2 = num[k];
                    num[k] = num[l];
                    num[l] = tmp2;
                }
                System.arraycopy(num, j+1, num, i+1, num.length - 1 - (j+1) + 1);
//                num[num.length - 1] = tmp;
//                num[j] = tmp;
                return;
            }
            --j;
            i = j - 1;
        }
        i = 0;
        j = num.length - 1;
        for(; i < j; ++i, --j){
            int tmp = num[i];
            num[i] = num[j];
            num[j] = tmp;
        }
        return;
    }