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.
思路:
按题目要求的规则进行对数组进行排序,排序后拼装最后的字符串即可。
排序方法需要自定义,自己想的方法比较搓,看了discuss的排序方法,很巧妙。
先生成一个字符串数组,比较两个字符串数字时,先生成两个字符串数字能组合出的数字,然后再compare两个组合出的字符串数字。
最后有一个坑,是数组中所有数字都是0的极限情况。
public String largestNumber(int[] nums) {
if (nums == null || nums.length == 0) {
return "0";
}
String[] s_num = new String[nums.length];
for (int i = 0; i < nums.length; i++) {
s_num[i] = String.valueOf(nums[i]);
}
Comparator<String> comp = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String s1 = o1 + o2;
String s2 = o2 + o1;
return s2.compareTo(s1);
}
};
Arrays.sort(s_num, comp);
if (s_num[0].equals("0")) {
return "0";
}
StringBuilder buffer = new StringBuilder();
for (int i = 0; i < nums.length; i++) {
buffer.append(s_num[i]);
}
return buffer.toString();
}