题目信息
小组中有多个人,每个人手中有一个卡片,卡片上是6位内的正整数,将卡片连接起来可以组成多个数字,计算可以组成的最大数字。
- 输入描述 逗号“,” 分割的多个正整数字符串,不考虑非数字的异常情况,小组最多25人
- 输出描述 最大的数字字符串
- 示例 输入 22,221
- 示例 输出 22221
题解
题目意思,拼接最大数字
- 数字须要排列
- 比较大的值须排在前面
- 如下图示例,长度不等时,拼接值大的数字往前排,22和221组数字,22221大于22122,所以22排221前面
- 如下图所示,长度相等时,数字值大的数字往前面排,234和341组数字,341234大于234341,所以342排234前面
编码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
public class MostNum {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input;
while ((input = br.readLine()) != null) {
// 将输入字符串逗号分割,将分割后的数组转换为list
String[] numArr = input.split(",");
List<String> list = Arrays.asList(numArr);
// 对list进行排序
// 若字符串长度相等,则将数字值大的放前面 23和12比较,23排前面
// 若长度不等,比较拼接值大小,拼接值大的放前面 123和23,23123值大于12323,23排123
list.sort((next, previous) -> next.length() == previous.length() ?
previous.compareTo(next) : (previous + next).compareTo(next + previous));
// 对list中字符数字进行拼接
StringBuilder sb = new StringBuilder();
for (String num : list) {
sb.append(num);
}
System.out.println(sb);
}
}
}