classSolution {publicStringminNumber(int[] nums) {// 把整数数组转换为字符串数组String[] strs =newString[nums.length];for (int i=0;i<nums.length;i++) { strs[i] =String.valueOf(nums[i]); }/** * Arrays.sort默认是对元素进行从小到大的排序 * 修改排序规则如下,仍是从小到大进行排序,但是比较的不是 x 和 y * 而是 x + y 和 y + x * 1. x + y < y + x 时表示 x < y,x 排在 y 之前可以获得较小值 * 2. x + y > y + x 时表示 x > y,x 排在 y 之后可以获得较小值 */Arrays.sort(strs, (x, y) -> (x + y).compareTo(y + x));// 把排序后的字符串数组拼接成结果字符串StringBuilder res =newStringBuilder();for (String str: strs) {res.append(str); }returnres.toString(); }}
3.2 Kotlin
classSolution {funminNumber(nums: IntArray): String {// 把整数数组转换为字符串数组val strs =arrayOfNulls<String>(nums.size)for (i in nums.indices) { strs[i] = nums[i].toString() }/** * Arrays.sort默认是对元素进行从小到大的排序 * 修改排序规则如下,仍是从小到大进行排序,但是比较的不是 x 和 y * 而是 x + y 和 y + x * 1. x + y < y + x 时表示 x < y,x 排在 y 之前 * 2. x + y > y + x 时表示 x > y,x 排在 y 之后 */ Arrays.sort<String>(strs) { x, y -> (x + y).compareTo(y + x) }// 把排序后的字符串数组拼接成结果字符串val res =StringBuilder()for (str in strs) { res.append(str) }return res.toString() }}
3.3 复杂度分析
时间复杂度 O(NlogN) :其中 N 是结果字符串的长度。使用快排或者内置函数平均时间复杂度为 O(NlogN) ,最差时间复杂度为 O(N^2) 。