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.
public class Solution {
public String largestNumber(int[] nums) {
if(nums==null||nums.length==0) return "";
//convert int[] into String[]
String[] strNums = new String[nums.length];
for(int i=0; i<nums.length; i++){
strNums[i] = Integer.toString(nums[i]);
}
// sort String[] based on self-designed comparator
Arrays.sort(strNums, new numberComparator());
//special case:[0,0,0,0..]
if(strNums.length>1&&strNums[0].equals("0")) return "0";
// put result into one String
StringBuilder result= new StringBuilder(nums.length);
for(String i : strNums){
result.append(i);
}
return result.toString();
}
}
//
class numberComparator implements Comparator<String> {
@Override
public int compare(String str1, String str2){
String s1 = str1+str2;
String s2 = str2+str1;
//降序, string.compareTo 字典排序
return s2.compareTo(s1);
//升序
//return s1.compareTo(s2);
}
}