public String minNumber(int[] nums){ String[] strs = new String[nums.length]; for (int i = 0; i < nums.length; i++) { strs[i] = String.valueOf(nums[i]); } quickSort(strs, 0, strs.length - 1); StringBuilder res = new StringBuilder(); for (String s : strs) { res.append(s); } return res.toString(); }
// 使用快排 privatevoidquickSort(String[] strs, int left, int right){ if (left >= right) return; int i = left, j = right; String tmp = strs[i]; while (i < j) { // 如果 j + left > left + j, 那么left就应该做左侧, j在右侧。所以j--, 比较下一个值 while ((strs[j] + strs[left]).compareTo(strs[left] + strs[j]) >= 0 && i < j) { j--; } // 如果 i + left < left + i, 那么i应该在左侧, left在右侧。所以i++, 比较下一个值 while ((strs[i] + strs[left]).compareTo(strs[left] + strs[i]) <= 0 && i < j) { i++; } // 找到两个要交换的值,将其交换 tmp = strs[i]; strs[i] = strs[j]; strs[j] = tmp; } strs[i] = strs[left]; strs[left] = tmp; quickSort(strs, left, i - 1); quickSort(strs, i + 1, right); }