public void nextPermutation(int[] num) {
        List<Integer> list = new ArrayList<Integer>();
        int length = num.length;
        if(num == null||length == 0)
            return ;
        int big = num[length-1];
        int target = num[length-1];

        int index = -1;
        for(int i =num.length-1 ;i>0;i--){  //检测是否降序排列
            if(num[i-1] < num[i]){          // 如果不是 j
                target = num[i-1];         //记录目标值，该为的新值需要比该值大。
                list.add(num[i-1]);
                list.add(num[i]);
                index = i-1;             //记下坐标
                break;
            }
            list.add(num[i]);
        }

        Collections.sort(list);

        if(index  == -1){  // 全部是降序，则放回一个升序。
            for (int i=0; i < list.size() ;i++ ) {
                num[i] = list.get(i);
            }
            return;
        }

        for (int i=0;i < list.size() ;i++ ) {    // 寻找一个比target 大的最小值。
            if(target < list.get(i)){
                target = list.get(i);
                list.remove(i);  //移除该值。
                break;
            }
        }

        num[index] = target;
        for (int i=0; i < list.size() ;i++ ) {
            num[i+index+1] = list.get(i);
        }

    }