解决此题的关键在于如何运用排序,当输入多个值时,我们要拼接成最大数,必然是要看高位数,高位数值越大,其拼接构成的值就会越大。基于此,我们就会想到,在字符串的方法中,有一个compareTo()方法,可以逐个扫描值的最高位。为了避免比较的字符串长度不同问题(因为不同会造成无法正确的比较我们想要的值),所以我们要构建两个相同长度的字符串进行比较,才能得出结果,再利用冒泡排序,将最大值推到数组的最前面,最后输出即可。

import java.util.*; public class Main {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Scanner sc=new Scanner(System.in);
	int n=sc.nextInt();
	String[] s=new String[n];
	for(int i=0;i<n;i++) {
		s[i]=sc.next();
	}
	for(int i=1;i<n;i++) {
		for(int j=0;j<n-i;j++) {
			if((s[j]+s[j+1]).compareTo(s[j+1]+s[j])<0) {
				String temp=s[j];
				s[j]=s[j+1];
				s[j+1]=temp;
			}
		}
	}
	for(int i=0;i<n;i++) {
		System.out.print(s[i]);
	}
}

}