【题目】
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
【思路】
- 实际是将数组元素进行排序的操作
- 排序规则为,若MN组成的数字大于NM,则N在前M在后
- 使用Comparatpr定制排序规则
- 考虑到数字连接起来可能使int溢出,所以转换为使用String来操作。
【代码】
class MinNum implements Comparator<String>{
public int compare(String a,String b){
return (a+b).compareTo(b+a);//-1是前小于后,小的放前面
}
}
public class demo {
public static void main(String[] args) {
int[] numbs = {3,32,321};
System.out.println(printMinNum(numbs));//321323
System.out.println("cc".compareTo("bc"));//1
}
//把数组排成最小的数
public static String printMinNum(int[] nums){
if(nums==null||nums.length==0){
return "";
}
String[] str=new String[nums.length];
for(int i=0;i<nums.length;i++){
str[i]=String.valueOf(nums[i]);
}
Arrays.sort(str, new MinNum());
StringBuilder sb=new StringBuilder();
for(int i=0;i<str.length;i++){
sb.append(str[i]);
}
return sb.toString();
}
public static String PrintMinNumber(int [] arr) {
if(arr==null||arr.length==0) return "";
StringBuffer sb=new StringBuffer();
int len=arr.length;
String[] str=new String[len];
//int[]转String[]
for(int i=0;i<len;i++){
str[i]=String.valueOf(arr[i]);
}
//String[]排序
Arrays.sort(str, new Comparator<String>(){
@Override
public int compare(String s1, String s2) {
String c1=s1+s2;
String c2=s2+s1;
return c1.compareTo(c2);//小的放前面
}
});
//拼接成String并返回
for(int i=0;i<len;i++){
sb.append(str[i]);
}
return sb.toString();
}
937

被折叠的 条评论
为什么被折叠?



