LeetCode:Largest Number

本文介绍了一种算法,用于将一组非负整数重新排列形成最大的可能数值。通过自定义排序规则,确保数字组合能够生成最大的序列,并提供Java实现代码。

Largest Number


Given a list of non negative integers, arrange them such that they form the largest number.

For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.

Note: The result may be very large, so you need to return a string instead of an integer.

Credits:
Special thanks to @ts for adding this problem and creating all test cases.

Subscribe to see which companies asked this question

Hide Tags
  Sort


















思路:

对数组进行排序,排序规则:如[3,34],它们的组合有334和343。明显334小343,因此3排序在34前面。


java code:

public class Solution {
    public String largestNumber(int[] nums) {
        if(nums == null || nums.length == 0) return "0";
		
        StringBuffer sb = new StringBuffer();
        
        String[] tmps = new String[nums.length];
        for(int i = 0; i< nums.length; i++) {
        	tmps[i] = nums[i] + "";
        }
		
        Comparator<String> cmp = new Comparator<String>() {
			@Override
			public int compare(String o1, String o2) {
				String str1 = o1 + o2;
				String str2 = o2 + o1;
				return str2.compareTo(str1);
			}
		};
		
		Arrays.sort(tmps, cmp);
		
		if(tmps[0].charAt(0)=='0') return "0"; // 处理[0,0]这种情况
		
		for(String str : tmps) {
			sb.append(str);
		}
		
        return sb.toString();
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值