思路:
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(); }