题目描述
设有nn个正整数(n≤20)(n≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3n=3时,33个整数1313,312312,343343联接成的最大整数为:3433121334331213
又如:n=4n=4时,44个整数77,1313,44,246246联接成的最大整数为:74246137424613
输入格式
第一行,一个正整数nn。
第二行,nn个正整数。
输出格式
一个正整数,表示最大的整数
输入输出样例
输入 #1复制
3
13 312 343
输出 #1复制
34331213
package 字符串;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class P1012 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
Integer[] a = new Integer[N];
for (int i = 0; i < N; i++) {
a[i] = sc.nextInt();
}
Comparator c = new MyComparable();
Arrays.sort(a, c);
String k = "";
for (int i = 0; i < N; i++) {
k += String.valueOf(a[i]);
}
System.out.println(k);
}
}
class MyComparable implements Comparator<Integer> {
//使用这样的写法可以翻我以前的博客
@Override
public int compare(Integer o1, Integer o2) {
String k1 = String.valueOf(o1);
String k2 = String.valueOf(o2);
for(int i=0;i<k1.length()&&i<k2.length();i++){
int f1 = k1.charAt(i);
int f2 = k2.charAt(i);
if(f1==f2){
continue;
}else if(f1>f2){
return -1;
}else {
return 1;
}
}
//仔细观察你会发现比如32和321比较,必须要32在321前面,所以做如下检测
if(k1.length()>k2.length()){
return (k1.charAt(k1.length()-1))-k2.charAt(0);
}
if(k1.length()<k2.length()){
return (k2.charAt(k1.length()-1))-k1.charAt(0);
}
return 0;
}
}