思路:
1.把int数组转为String数组
2.对String数组排序,需要重写compare()方法。
1)当21和2比较时,按理21比2大,组合为212,但实际221更大。因此当字符之间比较时,如果一个字符包含于另一个字符,则被包含的字符放在前面。即2被21包含,2在21前面。
3.需要注意"0"+"0"+"0"组合后应该是"0",而不是"000"。
public String solve (int[] nums) {
// write code here
if(nums.length==0){
return "";
}
StringBuilder res=new StringBuilder();
String[] str=new String[nums.length];
for(int i=0;i<nums.length;i++){
str[i]=nums[i]+"";
}
//数组排序
Arrays.sort(str, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int i=0;
while(i<o1.length() && i<o2.length()){
//若o1与o2不能完全包含对方或被对方包含,则退出,使用普通的比较方式,挨个字符比
if(o1.charAt(i)!=o2.charAt(i)){
break;
}
i++;
}
//o1被o2包含
if(i==o1.length()){
return -1;
}
//o2被o1包含
if(i==o2.length()){
return 1;
}
return o2.compareTo(o1);
}
});
for(int i=0;i<str.length;i++){
res.append(str[i]);
}
//需要判断是否属于0+0+0的情况
if(Long.parseLong(res.toString())==0){
return "0";
}
//把StringBuilder转为String类型。
return res.toString();
}
京公网安备 11010502036488号