/** * 练习下快速排序 * * @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; }