題目描述
輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{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)。