题目:把数组排成最小的数
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路:
定义一个排序规则,数组根据这个规则排序之后能排成一个更小的数字。要确定排序规则,就要比较这两个数字,也就是给出两个数字m和n,我们需要确定m和n那个应该排在前面,而不仅仅只是比较这两个数字的值那个大。
根据题目的要求,两个数字m和n能拼接的数字为mn和nm。
如果mn<nm,应该打印mn,也就是m应该排在n的前面,我们定义此时m<n;
反之m>n(潜在问题,两数的拼接的数字用int表示有可能溢出,所以转化为字符串),所以可以比较字符串的字典序。
import java.util.*;
public class Solution {
public String PrintMinNumber(int [] numbers) {
//使用排序:自定义排序的前后位置,凭借的字符串字典序小的在前面
//将数组转化为字符串
String [] s=new String[numbers.length];
for(int i=0;i<numbers.length;i++) {
s[i]=numbers[i]+"";
}
//System.out.println(Arrays.toString(s));
//对字符串进行排序
Arrays.sort(s,new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return (o1+o2).compareTo(o2+o1);
}
});
//System.out.println(Arrays.toString(s));
//返回排序后的字符串的整合
StringBuffer sb=new StringBuffer();
for(String sub:s) {
sb.append(sub);
}
return sb.toString();
}
}