题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
练习地址
https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993
参考答案
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Solution {
public String PrintMinNumber(int[] numbers) {
if (numbers == null || numbers.length == 0) {
return "";
}
ArrayList<String> numberList = new ArrayList<>();
for (int number : numbers) {
numberList.add(String.valueOf(number));
}
Collections.sort(numberList, new Comparator<String>() {
@Override
public int compare(String str1, String str2) {
String combine1 = str1 + str2;
String combine2 = str2 + str1;
return combine1.compareTo(combine2);
}
});
StringBuilder sb = new StringBuilder();
for (String number : numberList) {
sb.append(number);
}
return sb.toString();
}
}
复杂度分析
- 时间复杂度:O(nlogn)。
- 空间复杂度:O(n)。
网友评论