题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
上来直接干也行,但是好像别人的技巧更秒:即a+""+b与b+""+a比较,如果a+""+b>b+""+a,则a该跟b换换位置了。
import java.util.ArrayList;
public class Solution {
public String PrintMinNumber(int [] numbers) {
if(numbers==null||numbers.length<=0) return "";
for(int i =0; i<numbers.length;i++){
for(int j = i+1;j<numbers.length;j++){
int sum1 = Integer.valueOf(numbers[i]+""+numbers[j]);
int sum2 = Integer.valueOf(numbers[j]+""+numbers[i]);
if(sum1>sum2){
int tem = numbers[i];
numbers[i] = numbers[j];
numbers[j] = tem;
}
}
}
// 这里最好使用StringBuilder拼接,因为用字符串累加其实最终调用的也是new StringBuilder,会new很多无用的对象
StringBuilder str = new StringBuilder();
for(int i = 0;i<numbers.length;i++){
str.append(numbers[i]);
}
return str.toString();
}
}
- 时间复杂度:O(nlogn)。
- 空间复杂度:O(n)。