/**
     * 练习下快速排序
     *
     * @param nums
     * @return
     */
    public static String solve(int[] nums) {
        // write code here
        quickSort(nums, 0, nums.length - 1);
        StringBuilder sb = new StringBuilder();
        int i = 0;
        for (int value : nums) {
            if (value == 0) {
                i++;
            }
            sb.append(value);
        }
        if (i == nums.length) {
            return "0";
        }
        return sb.toString();
    }

    private static void quickSort(int[] nums, int low, int high) {
        if (low >= high) {
            return;
        }
        int p = partiton(nums, low, high);
        quickSort(nums, low, p - 1);
        quickSort(nums, p + 1, high);
    }

    private static int partiton(int[] nums, int low, int high) {
        int tmp = nums[low];
        while (low < high) {
            while (low < high && alowb(nums[high], tmp)) {
                high--;
            }
            nums[low] = nums[high];
            while (low < high && !alowb(nums[low], tmp)) {
                low++;
            }
            nums[high] = nums[low];
        }
        nums[low] = tmp;
        return low;
    }

    private static boolean alowb(int num, int tmp) {
        // num>tmp
        String a = Integer.toString(num);
        String b = Integer.toString(tmp);
        char[] ac = a.toCharArray();
        char[] bc = b.toCharArray();
        int i = 0;
        int j = 0;
        while (i < ac.length && j < bc.length) {
            if (ac[i] > bc[j]) {
                return false;
            } else if (ac[i] == bc[j]) {
                i++;
                j++;
            } else {
                return true;
            }
        }
        if (j < bc.length) {
            if (bc[j] == '0') {
                return false;
            } else {
                return bc[j] > ac[0];
            }
        }
        if (i < ac.length) {
            if (ac[i] == '0') {
                return true;
            } else {
                return ac[i] < bc[0];
            }
        }
        return false;
    }