【leetcode】179.(Medium)Largest Number

解题思路

重写Collections.sort()中的compare方法,规则为:
有两个字符串s1=“12”、s2=“34”,由于3412>1234,所以令s2+s1>s1+s2

提交代码
class Solution{
	public String largestNumber(int[] nums) {
		// 将int数组改为String数组,方便后面进行比较
		List<String> list=new ArrayList<String>();
		for(int num : nums)
			list.add(String.valueOf(num));
		
		// 使用Collections.sort()对数组进行排序,排序规则为两个字符串相加后的
		// 结果比较。这里是逆序排序
		Collections.sort(list,new Comparator<String>() {
			@Override
			public int compare(String s1,String s2) {
				return Long.parseLong(s1+s2)>Long.parseLong(s2+s1)?-1:1;
			}
		});
		
		// 将排序后的结果串起来
		StringBuilder sbuilder=new StringBuilder();
		for(String s :list)
			sbuilder.append(s);
		
		// 剃掉前面的0
		while(sbuilder.charAt(0)=='0'&&sbuilder.length()>1)
			sbuilder.delete(0,1);
		
		return sbuilder.toString();
	}
}

1、首先将int型的数组改为String型的数组,因为改为String类型更方便两个数字进行拼接和比较
2、使用Comparator比较器接口,重载compare方法
3、使用StringBuilder将数组中的结果串起来
4、剃掉前面的0

运行结果:

在这里插入图片描述


评论区重载Comparator比较器接口的代码看起来很优雅:

Collections.sort(list,(a,b) -> (int)(Long.parseLong(b+a) - Long.parseLong(a+b)) );

一行就写完了。。。

然后剔除字符串前面的0他是这么写的:

return sb.toString().replaceFirst("^0+(?!$)", "");

也是一行就写完了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值