一、题目描述
二、题解
1. 解题思路与方法
题目要求简单直接给出,将数全部首尾相接拼起来后所得的数最大,根据题意会发现,这实际上是一道排序题,需要将给出的数按一定的顺序排序,但该以什么样的顺序排序呢,根据贪心的思想简单分析一下就会发现应该将这些数以拼起来最大的顺序排序,此时排序的方法就明了了,举个例子,有12和139两个数,那该怎么排序呢?很简单,直接将两个数拼起来,可以根据先后顺序拼成“12139”或“13912”两个数,此时进行比较哪个数更大即可知道谁该排在前面。
2. code
import java.security.spec.RSAOtherPrimeInfo;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ArrayList<Long> arr = new ArrayList<>();
for (int i = 0; i < n; i++) {
arr.add(sc.nextLong());
}
String ans="";
arr.sort(new Comparator<Long>() { //重写比较的方法
@Override
public int compare(Long o1, Long o2) {
String s1 = o1.toString()+o2.toString();
String s2 = o2.toString()+o1.toString();
if(Long.parseLong(s1)==Long.parseLong(s2)){ //相等则谁排前面都一样
return 0;
}
return Long.parseLong(s2)>Long.parseLong(s1)?1:-1;
//不相等则按合并后值大的顺序排
}
});
for (Long aLong : arr) { //排好后即为答案
ans += aLong;
}
System.out.println(ans);
}
}