题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
练习地址
https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993
https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/
参考答案
class Solution {
public String minNumber(int[] nums) {
String[] numbers = new String[nums.length];
for (int i = 0; i < nums.length; i++) {
numbers[i] = String.valueOf(nums[i]);
}
Arrays.sort(numbers, (x, y) -> (x + y).compareTo(y + x));
StringBuilder res = new StringBuilder();
for (String num : numbers) {
res.append(num);
}
return res.toString();
}
}
复杂度分析
- 时间复杂度:O(nlogn)。
- 空间复杂度:O(n)。