多个数组成最大数字

题目信息

小组中有多个人,每个人手中有一个卡片,卡片上是6位内的正整数,将卡片连接起来可以组成多个数字,计算可以组成的最大数字。

  • 输入描述 逗号“,” 分割的多个正整数字符串,不考虑非数字的异常情况,小组最多25人
  • 输出描述 最大的数字字符串
  • 示例 输入 22,221
  • 示例 输出 22221

题解

题目意思,拼接最大数字

  1. 数字须要排列
  2. 比较大的值须排在前面
  3. 如下图示例,长度不等时,拼接值大的数字往前排,22和221组数字,22221大于22122,所以22排221前面
  4. 如下图所示,长度相等时,数字值大的数字往前面排,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);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/magi1201/article/details/114418949