032把数组排成最小的数
题目描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
该题的核心就是就是使用比较器方法,因为数组中数字拼接比较的话会超出int范围,因此使用字符串比较比较合适。
public class Test {
public String minNum ( int [ ] arr) {
List< Integer> list = new ArrayList ( ) ;
for ( Integer i: arr) {
list. add ( i) ;
}
Collections. sort ( list, new Comparator < Integer> ( ) {
@Override
public int compare ( Integer integer, Integer t1) {
String str1 = String. valueOf ( integer) + String. valueOf ( t1) ;
String str2 = String. valueOf ( t1) + String. valueOf ( integer) ;
return str1. compareTo ( str2) ;
}
} ) ;
StringBuffer sb = new StringBuffer ( ) ;
for ( Integer i: list) {
sb. append ( i) ;
}
return sb. toString ( ) ;
}
public static void main ( String[ ] args) {
int [ ] arr = { 3 , 32 , 321 } ;
Test test = new Test ( ) ;
System. out. println ( test. minNum ( arr) ) ;
}
}