前言:
赶上春节了,这几天家里来人,所以没有更新,今天闲下来了,赶紧学习。
题目介绍
设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
输入描述:
有多组测试样例,每组测试样例包含两行,第一行为一个整数
N(N<=100),第二行包含N个数(每个数不超过1000,空格分开)。
输出描述:
每组数据输出一个表示最大的整数。
示例:
2
12 123
4
7 13 4 246
输出:
12312
7424613
解题思路
由样例可以看出,此题实际上是对数字的排序,只不过是排序方式不是数字大小,而是各个数字对应各位位置的排序。如在 7 13 4,246 中7 >4>2>1(每个数字的第一位排序) 所以排序为7424613 如此得出最大的数字。
如果我们用一眼能想到的思路应该是获得到数字后用除10除100的方法获得各个位然后进行比较。但是很明显,太麻烦了。换个思路想,我们可以对数字进行排序,当然也可以对字符串进行排序。正巧的是当字符串进行ASCⅡ进行排序时,其正好比较的是各个位的ASCⅡ值得大小。那么我们就用它来实现。
代码实现
package NumString;
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<Integer> list = new ArrayList<Integer>();
int n = scanner.nextInt();
for (int i = 0; i <n ; i++) {
list.add(scanner.nextInt());
}
System.out.println(list.toString());
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
System.out.println(o1.toString()+o2.toString());
System.out.println(o2.toString()+o1.toString());
System.out.println((o2.toString()+o1.toString()).compareTo(o1.toString()+o2.toString()));
return (o2.toString()+o1.toString()).compareTo(o1.toString()+o2.toString());
}
});
System.out.println(list.toString());
String t = "";
for(int i = 0 ; i<n;i++){
t = t+ list.get(i).toString();
}
System.out.println(t);
}
}
打了很多LOG,为了方便查看与理解。