Given a list of non negative integers, arrange them such that they form the largest number.
Example 1:
Input: [10,2]
Output: “210”
Example 2:
Input: [3,30,34,5,9]
Output: “9534330”
给一个int型数组,拼成一个最大的数字,因为数字可能会超出存储范围,所以返回string数字
思路:
就是一个string数组的自定义sort
[“3”, “30”, “34”, “5”, “9”] 排序,a,b元素比较的依据是a元素加b元素的时候比b元素加a元素大
这里用java语言的比较类Comparator
顺便说下Comparator和Comparable
Comparator的实现是compare(String s1, String s2)
Comparable的实现是compareTo(String s)
另外排序的话需要用String数组,而不是直接一个String
再说两个排序方法
Collections.sort<List, Comparator>, 如果用这种,需要用List类型
Arrays.sort<String[], Comparator>, 如果用这种,要用String数组
因为两个排序方法都是Comparator, 所以这里比较用Comparator
**出错点:
input数组 [0,0]
这种情况结果会是“00”,需要返回“0”
public String largestNumber(int[] nums) {
if (nums == null || nums.length == 0) {
return "";
}
String[] result = new String[nums.length];
String res = "";
for (int i = 0; i < nums.length; i++) {
result[i] = String.valueOf(nums[i]);
}
Arrays.sort(result, new Comparator<String>() {
public int compare(String s1, String s2) {
return -(s1 + s2).compareTo(s2 + s1);
}
});
if (result[0].equals("0")) {
return "0";
}
for (String tmp : result) {
res += tmp;
}
return res;
}