题目描述
小组中每位都有一张卡片,卡片上是6位内的正整数,将卡片连起来可以组成多种数字,计算组成的最大数字。
","号分割的多个正整数字符串,不需要考虑非数字异常情况,小组最多25个人。
- 输入
- 4589,101,41425,9999
- 输出
- 9999458941425101
题解
先对分割出来的字符串做排序,排序规则为两组元素组合时值最大的,则排在前面。
方法一 Comparator比较器
public static void main(String[] args) {
String input = "4589,101,41425,9999";
String output = findLargestNumber(input);
System.out.println(output);
}
/**
* 寻找最大值
* @param input
* @return
*/
private static String findLargestNumber(String input) {
String[] cards = input.split(",");
Arrays.sort(cards, new LargestNumberComparator());
StringBuilder result = new StringBuilder();
for (String card : cards) {
result.append(card);
}
return result.toString();
}
/**
* 最大值比较器
*/
private static class LargestNumberComparator implements Comparator<String> {
@Override
public int compare(String a, String b) {
String option1 = a + b;
String option2 = b + a;
return option2.compareTo(option1);
}
}
方法二 Lambda表达式
public static void main(String[] args) {
String input = "4589,101,41425,9999";
String output = findLargestNumber(input);
System.out.println(output);
}
private static String findLargestNumber(String input) {
String[] cards = input.split(",");
Arrays.sort(cards, (a, b) -> {
String option1 = a + b;
String option2 = b + a;
return option2.compareTo(option1);
});
StringBuilder result = new StringBuilder();
for (String card : cards) {
result.append(card);
}
return result.toString();
}