注意:最近有朋友指出了该做法并不正确,特此声明,当然,希望有大神可以来改正一下,本人能力有限,只能换一种方法去做。
错误做法:
正确做法:
/**
* 编程题:输入一个正整数数组,将他们拼接成一个数,输出拼接出所有数字中最小的一个
* 思路:对于两个字符串重新定义其大小规则,比如:给定两个字符串s1,s2,如果(s1+s2)>(s2+s1) 那么s1>s2,反之s2>s1
*/
public class Demo1{
public long newSort(long []arr) { //用长整型以免数据易于溢出
long result;
List list=new ArrayList();
//转为字符串数组,利用Comparator比较
for (long i:arr) { //第一种for循环输出方法;注意这里遍历输出的是对象
list.add(String.valueOf(i));
}
/* for (int i = 0; i < arr.length; i++) { //第二种传统的遍历输出方法;两者等同
long a=arr[i];
list.add(String.valueOf(a));
}*/
//自定义比较并排序
Collections.sort(list, new Comparator(){
public int compare(String o1, String o2) {
String m=o1+o2;
String n=o2+o1;
return m.compareTo(n);
}
});
//最后将排好序的字符串进行拼接得出结果
StringBuffer sBuffer=new StringBuffer();
for (String str : list) {
sBuffer.append(str);
}
result=Long.parseLong(sBuffer.toString());
return result;
}
public static void main(String[] args) {
long []a={3,32,321};
long []b={152,203,32,54,56,8};
Demo1 demo=new Demo1();
long c=demo.newSort(b);
long d=demo.newSort(a);
System.out.println(c+"\r"+d);
}
}