给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。
注意事项
最后的结果可能很大,所以我们返回一个字符串来代替这个整数。
样例
给出 [1, 20, 23, 4, 8]
,返回组合最大的整数应为8423201
。
public class Solution {
/*
* @param nums: A list of non negative integers
* @return: A string
*/
public String largestNumber(int[] nums) {
Comparator<Integer> cmpr = new Comparator<Integer>(){
public int compare(Integer a, Integer b){
String sa = a+"";
String sb = b+"";
if(sa.length()==sb.length()){
if(a==b) return 0;
return a>b?1:-1;
}
//保证a长度比b小
if(sa.length()>sb.length())
return -1*compare(b, a);
//取公共的部分比较
int ta = a;
int tb = Integer.valueOf(sb.substring(0, sa.length()));
if(ta==tb){
tb = Integer.valueOf(sb.substring(sa.length(), sb.length()));
//tb剩余部分再与ta比较
return compare(ta, tb);
}else{
return ta>tb?1:-1;
}
}
};
Integer[] numss = new Integer[nums.length];
for(int i=0; i<nums.length; i++) {
numss[i] = nums[i];
}
Arrays.sort(numss, cmpr);//sort比较器类型必须和数组的一致,否则报错
//0的特殊处理
if(numss[numss.length-1]==0)
return "0";
StringBuffer res = new StringBuffer("");
for(int i=numss.length-1; i>=0; i--){
res.append(numss[i]);
}
return res.toString();
}
}