标签:
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.
题目大意:给定一个数组,数组里都是非负整数,求一个组合使得这个数是最大的。
解题思路:这个题一开始我是自定义class然后写comparator,首先比较第一位数,然后比较第二位……后来想了一下其实直接把两个数转为String,然后分别前后拼接一下就可以比较了。直接sort就可以得到结果,代码更清晰。或者定义一个PriorityQueue,自定义comparator,把给定的数组转为这个queue也是一样的。
public String largestNumber(int[] nums) { if (nums == null || nums.length < 1) { return null; } LinkedList<String> res = new LinkedList<>(); for (int num : nums) { res.add(String.valueOf(num)); } StringBuilder sb = new StringBuilder(); Collections.sort(res, new Comparator<String>() { @Override public int compare(String o1, String o2) { String s1 = o2 + o1; String s2 = o1 + o2; return s1.compareTo(s2); } }); for (String next : res) { sb.append(next); } int cnt = 0; while (cnt < sb.length() && sb.charAt(cnt) == ‘0‘) { cnt++; } return sb.substring(cnt == sb.length() ? cnt - 1 : cnt); }
标签:
原文地址:http://www.cnblogs.com/aboutblank/p/4442425.html